WEB开发网
开发学院数据库Oracle 通过分析SQL语句的执行计划优化SQL(三) 阅读

通过分析SQL语句的执行计划优化SQL(三)

 2007-07-31 12:34:12 来源:WEB开发网   
核心提示: 在ORACLE的发展过程中,一共开发过2种类型的优化器:基于规则的优化器和基于代价的优化器,通过分析SQL语句的执行计划优化SQL(三)(2),这2种优化器的不同之处关键在于:取得代价的方法与衡量代价的大小不同,现对每种优化器做一下简单的介绍:基于规则的优化器 -- Rule Based

在ORACLE的发展过程中,一共开发过2种类型的优化器:基于规则的优化器和基于代价的优化器。这2种优化器的不同之处关键在于:取得代价的方法与衡量代价的大小不同。现对每种优化器做一下简单的介绍:

基于规则的优化器 -- Rule Based (Heuristic) Optimization(简称RBO):

在ORACLE7之前,主要是使用基于规则的优化器。ORACLE在基于规则的优化器中采用启发式的方法(Heuristic Approach)或规则(Rules)来生成执行计划。例如,如果一个查询的where条件(where clause)包含一个谓词(predicate,其实就是一个判断条件,如”=”, “>”, ”<”等),而且该谓词上引用的列上有有效索引,那么优化器将使用索引访问这个表,而不考虑其它因素,如表中数据的多少、表中数据的易变性、索引的可选择性等。此时数据库中没有关于表与索引数据的统计性描述,如表中有多上行,每行的可选择性等。优化器也不考虑实例参数,如multi block i/o、可用排序内存的大小等,所以优化器有时就选择了次优化的计划作为真正的执行计划,导致系统性能不高。

如,对于

select * from emp where deptno = 10;

这个查询来说,如果是使用基于规则的优化器,而且deptno列上有有效的索引,则会通过deptno列上的索引来访问emp表。在绝大多数情况下,这是比较高效的,但是在一些特殊情况下,使用索引访问也有比较低效的时候,现举例说明:

1:emp表比较小,该表的数据只存放在几个数据块中。此时使用全表扫描比使用索引访问emp表反而要好。因为表比较小,极有可能数据全在内存中,所以此时做全表扫描是最快的。而如果使用索引扫描,需要先从索引中找到符合条件记录的rowid,然后再一一根据这些rowid从emp中将数据取出来,在这种条件下,效率就会比全表扫描的效率要差一些。

上一页  1 2 3 4 5 6  下一页

Tags:通过 分析 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接