zoukankan      html  css  js  c++  java
  • 新的优化参数将响合时候减少到了最小

      滥觞:网海拾贝




    在Oracle9 i 之前的版本里,仅有的两种基于价钱的优化器(cost-based optimizer,CBO)形式是ALL_ROWS和FIRST_ROWS优化。传统的FIRST_ROWS SQL优化的一个缺陷是,这一算法没有指定数据行检索的范围。

    可是Oracle9 i 引入了多种新的优化器呼吁:

    FIRST_ROWS_1
    FIRST_ROWS_10
    FIRST_ROWS_100
    FIRST_ROWS_1000
    FIRST_ROWS_ n 优化会赐顾帮衬盘考优化器,让它选择一个可以把响应时候减到最小的盘考实行规划,以孕育迸发盘考下场的前 n 行。

    你可以在数据库里的多个条理上设置这个新的CBO形式:零碎范围内、会话这一层,或许在盘考这一层。

    alter system set optimizer_mode=first_rows_100;

    alter session set optimizer_mode = first_rows_100;

    select /* first_rows(100) */ from student;

    凭证Oracle的消息,有了FIRST_ROWS_ n 优化,Oracle盘考会为下场集里的前 n 行给出最佳的能够响合时候。带有 n 行下场的疾速响应会增强用户对很对使用次第的如意度,因为用户可以更快地获得数据集前面的下场。

    ALL_ROWS优化更倾向于完整表格扫描,而FIRST_ROWS优化更倾向于索引的运用,可是Oracle用FIRST_ROWS_ n 优化扩展了这一观点。

    在传统的FIRST_ROWS优化里,Oracle CBO更倾向于索引检索,纵然它的全体价钱要比完整表格扫描更高。这在小表格的情形下尤其如斯,因为如许举行完整表格扫描的价钱不是太大。

    想想下面的例子。

    Set autotrace on explain

    alter session set optimizer_goal = choose;

    select * from emp where sal < 1200;

    PLAN -----------------------------------------------------
    SELECT STATEMENT (OPTIMIZER=CHOOSE) (COST=62) (ROWS=99)
    TABLE ACCESS FULL EMP (COST=62) (ROWS=99)

    现在,我们会用FIRST_ROWS优化运转异常的盘考。

    alter session set optimizer_goal = first_rows;

    select * from emp where sal < 1200;

    The explain plan is now transformed to:

    PLAN -----------------------------------------------------
    SELECT STATEMENT (OPTIMIZER=FIRST_ROWS) (COST=102)
      TABLE ACCESS BY INDEX ROWID EMP (COST=102) (ROWS=99)
      INDEX RANGE SCAN SAL_IDX (COST=2) (ROWS=99)

    虽然我们估计CBO会倾向于索引,可是我们很意外地看到FIRST_ROWS优化选择了一种比完整表格扫描价钱更大的路子。这是等于枢纽点。在Oracle9 i 之前的版本里,FIRST_ROWS优化是外部规定礼貌和价钱的夹杂体,而Oracle9 i 的FIRST_ROWS优化则完全是基于价钱的。

    在Oracle9 i 之前的版本里,我们会运用OPTIMIZER_INDEX_COST_ADJ参数来节制CBO的倾向,让其选择索引而不是完整表格扫描。

    虽然Oracle宣称FIRST_ROWS_ n 优化会让盘考更快,可是要记取的是,Oracle9 i CBO所做的统统只思索了对前几行的拜候,而牺牲了盘考(的价钱)。换句话说,FIRST_ROWS_ n 形式所做的统统是承诺优化器作出愈加智能的选择:在拜候小表格的时分真相是运用索引仍是完整表格扫描。因为大多半的Oracle9 i DBA都市在KEEP池里缓冲这些小表格,所以这个参数简直没有什么用。

    本文作者: Donald Burleson做数据库治理员曾经有23年了,曾经写过14本关于数据库的书和超出100篇的文章。他是《Oracle底细(Oracle Internals)》的主编,并运营着Burleson Oracle咨询公司(Burleson Oracle Consulting)。




    版权声明: 原创作品,承诺转载,转载时请务必以超链接情势标明文章 原始理由 、作者信息和本声明。不然将清查法律责任。

  • 相关阅读:
    [转载]Oracle中TO_DATE()函数用法
    validationEngine
    批处理执行sql语句 osql
    asp.net导出excel
    Oracle nls_sort和nlssort 排序功能介绍
    js中2个等号与3个等号的区别
    【36】第零章 起航
    那些年,我还在学习Ajax
    那些年,我还在学习java
    那些年,我还在学习jquery
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975858.html
Copyright © 2011-2022 走看看