oracle 执行计划
时间:2010-09-27 来源:ank
查看执行计划的三种方法
1设置autotrace
序号 |
命令 |
解释 |
1 |
SET AUTOTRACE OFF |
此为默认值,即关闭Autotrace |
2 |
SET AUTOTRACE ON EXPLAIN |
只显示执行计划 |
3 |
SET AUTOTRACE ON STATISTICS |
只显示执行的统计信息 |
4 |
SET AUTOTRACE ON |
包含2,3两项内容 |
5 |
SET AUTOTRACE TRACEONLY |
与ON相似,但不显示语句的执行结果 |
2使用sql
示例:
SQL> EXPLAIN PLAN FOR SELECT * FROM DAVE;
已解释。
SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));
PLAN_TABLE_OUTPUT
3使用toad,pl/sql,develop工具
查看执行计划
cardinality(基数)/rows
表示CBO从一个行源(row source)返回的记录数,
9icardinality 缩写成card
10g中,card值被rows替换
Cardinality的值对于CBO做出正确的执行计划来说至关重要
SQL> SET AUTOTRACE TRACEONLY; -- 只显示执行计划,不显示结果集
SQL> select * from scott.emp a,scott.emp b where a.empno=b.mgr;
已选择13行。
执行计划
---------------------------------------------------------- |
执行计划中的字段解释 ID: 一个序号,但不是执行的先后顺序。执行的先后根据缩进来判断 (一般按缩进长度来判断,缩进最大的最先执行,如果 有2行缩进一样,那么就先执行上面的。) Operation: 当前操作的内容。 Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。 Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的 代价。 Time:Oracle 估计当前操作的时间。
谓词说明 access 表示这个谓词条件的值将会影响数据的访问路劲(表还是索引)。 Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
统计信息说明 recursive calls db block gets : 从buffer cache中读取的block的数量 consistent gets: 从buffer cache中读取的undo数据的block的数量 physical reads: 从磁盘读取的block的数量 redo size: DML生成的redo的大小 sorts (memory) :在内存执行的排序量 sorts (disk) :在磁盘上执行的排序量
bytes sent via SQL*Net to client bytes received via SQL*Net from client SQL*Net roundtrips to/from client rows processed