sqlplus的autotrace是分析sql的执行计划,执行效率的一个非常简单方便的工具,在绝大多数情况下,也是非常有用的工具。利用autotrace工具提供的sql执行计划和执行状态可以为我们优化sql的时候提供优化的依据,以及优化效果的明显的对比效果。
在sqlplus中输入相关autotrace命令,输入想要优化的sql语句,即可得到sql的执行计划和执行状态信息。
sql> set timing on //开启时间显示
sql> set autot traceonly //仅显示trace结果,不显示sql执行结果
sql> select * from ac01 where aac001=’9990000111′;
已用时间: 00: 00: 00.62
execution plan
———————————————————-
0 select statement optimizer=choose
1 0 table access (by index rowid) of ‘ac01′
2 1 index (unique scan) of ‘pk_ac01′ (unique)
statistics
———————————————————-
0 recursive calls
0 db block gets
3 consistent gets
2 physical reads
0 redo size
1875 bytes sent via sql*net to client
424 bytes received via sql*net from client
2 sql*net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed
用法: set autot[race] {off | on | trace[only]} [exp[lain]] [stat[istics]]
举例:
set autot[race] off 停止autotrace
set autot[race] on 开启autotrace,显示autotrace信息和sql执行结果
set autot[race] traceonly 开启autotrace,仅显示autotrace信息
set autot[race] on explain 开启autotrace,仅显示autotrace的explain信息
set autot[race] on statistics开启autotrace,仅显示autotrace的statistics信息
三. 执行计划的分析
execution plan
———————————————————-
0 select statement optimizer=choose
1 0 table access (by index rowid) of ‘ac01′
2 1 index (unique scan) of ‘pk_ac01′ (unique)
———————————————————-
这个就是sql select * from ac01 where aac001=’9990000111′;执行计划。
执行的过程为:
1) index (unique scan) of ‘pk_ac01′ (unique)
2) table access (by index rowid) of ‘ac01′
执行计划是一个树状结构,计划的执行是从叶结点开始,直到根结点。所以不同的层上,越底层的越先被执行(第一列数字中较大的);不同层上,越左边的越先被执行(第二列数字中较小的)。
通过分析这个实行计划可以知道以下几点:
a) 这是一条select语句
b) 数据库系统现在使用的优化器模式为choose
c) 执行的时候先通过ac01表上的唯一索引pk_ac01查找到相应记录的rowid,,然后通过索引的rowid直接访问ac01表,找到相应的记录。
这是一条比较简单的sql,所以执行计划也相对来说比较简单,没有涉及到过多的连接和索引等。
