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

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

 2007-08-20 12:38:13 来源:WEB开发网   
核心提示:例1:假设LARGE_TABLE是一个较大的表,且username列上没有索引,通过分析SQL语句的执行计划优化SQL(13),则运行下面的语句:SQL> SELECT * FROM LARGE_TABLEwhere USERNAME = ‘TEST’;Query Plan--SELECT

例1:

假设LARGE_TABLE是一个较大的表,且username列上没有索引,则运行下面的语句:

SQL> SELECT * FROM LARGE_TABLE
where USERNAME = ‘TEST’;
Query Plan
------------------------------
SELECT STATEMENT Optimizer=CHOOSE
(Cost=1234 Card=1 Bytes=14)
 TABLE ACCESS FULL LARGE_TABLE
[:Q65001] [ANALYZED]

在这个例子中,TABLE ACCESS FULL LARGE_TABLE是第一个操作,意思是在LARGE_TABLE表上做全表扫描。当这个操作完成之后,产生的row source中的数据被送往下一步骤进行处理,在此例中,SELECT STATEMENT操作是这个查询语句的最后一步。

Optimizer=CHOOSE 指明这个查询的optimizer_mode,即optimizer_mode初始化参数指定的值,它并不是指语句执行时真的使用了该优化器。决定该语句使用何种优化器的唯一方法是看后面的cost部分。例如,如果给出的是下面的形式,则表明使用的是CBO优化器,此处的cost表示优化器认为该执行计划的代价:

SELECT STATEMENT   Optimizer=CHOOSE
(Cost=1234 Card=1 Bytes=14)

然而假如执行计划中给出的是类似下面的信息,则表明是使用RBO优化器,因为cost部分的值为空,或者压根就没有cost部分。

SELECT STATEMENT Optimizer=CHOOSE Cost=
SELECT STATEMENT Optimizer=CHOOSE

这样我们从Optimizer后面的信息中可以得出执行该语句时到底用了什么样的优化器。特别的,如果Optimizer=ALL_ROWS| FIRST_ROWS| FIRST_ROWS_n,则使用的是CBO优化器;如果Optimizer=RULE,则使用的是RBO优化器。

cost属性的值是一个在oracle内部用来比较各个执行计划所耗费的代价的值,从而使优化器可以选择最好的执行计划。不同语句的cost值不具有可比性,只能对同一个语句的不同执行计划的cost值进行比较。

[:Q65001] 表明该部分查询是以并行方式运行的。里面的数据表示这个操作是由并行查询的一个slave进程处理的,以便该操作可以区别于串行执行的操作。

[ANALYZED] 表明操作中引用的对象被分析过了,在数据字典中有该对象的统计信息可以供CBO使用。

Tags:通过 分析 SQL

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