一
1使用EXPLAIN PLAN生成预期查询计划,输出将包括:
(1)sql语句中所引用的每一张表
(2)访问每张表所用的方法
(3)每一对需要联结的数据源所用的联结方法
(4)按次序列出所有需要完成的运算
(5)计划中各步骤的谓语信息列表
(6)对于每个运算,估计出该步骤所要操作的数据行数和字节数
(7)对于每个运算,计算出成本值
(8)如果适用,所访问的分区信息
(9)如果适用,并行执行的相关信息
2生成解释计划两种方式(注:均是生成预期的执行计划,不实际执行查询。)
(1)explain plan for <sql语句>
select * from table (dbms_xplan.display);
(2)sqlplus autotrace命令
打开autotrace
set autotrace traceonly explain
执行sql语句
注:(1)看到的信息均是由expain plan 命令生成并默认存储在表plan_table中的。
(2)解释计划只列出了plan_table的一小部分列,dbms_xplan.display可以根据sql语句所生成的执行计划自动显示适当的列。
例如:如果计划中使用了分区运算,在输出中就会包含partition_start、partition_stop、partition_id这些列。
3plan_table表
4plan_table表常用列的定义
5手工查询plan_table表举例
6partent_id列:表示计划中的父子关系
只有一个子运算的运算可以分为以下3类:
加工运算:从子运算接收一个数据行集经过加工以后传递给其父运算
传递运算:只起传递作用不对来自子运算的数据做任何加工。基本上用来确定某个运算的特性,view运算就是传递运算的一个很好的例子。
迭代运算:表示子运算要多次执行,通常会在这类运算的名字上看到iterator、inlist、all字眼。