利用 explain plan,我们可以查看oracle优化器用来执行sql语句的查询计划。同trace相比,explain plan由于不用进行查询跟踪,只是分析执行计划,所以使用起来更为快速便捷。使用explain plan分析sql语句后,会在表plan_table中插入数据,查询该表即可获取sql执行计划,从而为开展sql优化提供方便。
一个简单的例子:
explain plan set statement_id='pay' for select * from pay where id>333
执行后,会在plan_table中插入数据,执行如下查询:
select lpad('',2*(level-1))||level||'.'||nvl(position,0)||' '||
operation||' '||options||' '||object_name||' '||object_type
||' '||decode(id,0,statement_id||'cost='||position)||cost
||' '||object_node"query plan"
from plan_table start with id=0 and statement_id='pay'
connect by prior id=parent_id and statement_id='pay'
,即可得到相应的sql执行计划:
1.1022 SELECT STATEMENT paycost=10221022
2.1 TABLE ACCESS FULL PAY 1022
注意,由于此处查询plan_table是采用从上至下的方式读取,所以阅读时应该由内向外阅读,即2。1先于1。1
执行。显然,此处由于表没有设置索引,所以查询为全表查询,开销是很大的。所以,借助此分析结果便可以
考虑进行sql优化。