1 三种常用的查看执行计划的方式概览
方式一:通过 DM 数据库配套管理工具查看。
方式二:使用 explain 命令查看。
方式三:使用disql 的set autotrace
2 管理工具查看执行计划
在 DM 配套管理工具中,选中待查看执行计划的 SQL 语句,点击工具栏中的按钮,或使用快捷键 F9,即可查看执行计划。
例如:选中以下SQL,点击图中的序号2按钮即可。需要注意的是这里调用的是explain命令预估的执行计划,并没有真正的执行SQL。
3 使用 explain 命令查看执行计划
在待查看执行计划的 SQL 语句前加 explain 执行 SQL 语句即可查看预估的执行计划:
explain select * from sysobjects;
1 #NSET2: [1, 1115, 397]
2 #PRJT2: [1, 1115, 397]; exp_num(17), is_atom(FALSE)
3 #CSCN2: [1, 1115, 397]; SYSINDEXSYSOBJECTS(SYSOBJECTS as SYSOBJECTS); btr_scan(1)
已用时间: 1.199(毫秒). 执行号:0.
4 使用 disql 命令行set autotrace 查真实执行计划
语法:
SET AUTOTRACE <OFF(缺省值) | NL | INDEX | ON | TRACE | TRACEONLY>
当 SET AUTOTRACE OFF 时,停止 AUTOTRACE 功能,常规执行语句。
当 SET AUTOTRACE NL 时,开启 AUTOTRACE 功能,不执行语句,如果执行计划中有嵌套循环操作,那么打印 NEST LOOP 相关操作符的内容。
当 SET AUTOTRACE INDEX(或者 ON)时,开启 AUTOTRACE 功能,不执行语句,如果有表扫描,那么打印执行计划中表扫描的方式、表名和索引。
当 SET AUTOTRACE TRACE 时,开启 AUTOTRACE 功能,执行语句,打印执行计划,并展示执行过程中的部分监控信息;需要设置 INI 中监控参数 ENABLE_MONITOR、MONITOR_SQL_EXEC、ENABLE_MONITOR_DMSQL 均为开启(即等于 1 时)才有实际意义。此功能与服务器 EXPLAIN 语句的区别在于,EXPLAIN 只生成执行计划,并不会真正执行 SQL 语句,因此产生的执行计划有可能不准;而通过 TRACE 获得的执行计划,是服务器实际执行的计划(可能是重用了计划缓存中计划,也可能是新生成的计划)。
当 SET AUTOTRACE TRACEONLY 时,开启 AUTOTRACE 功能,执行语句,打印执行计划,并展示执行过程中的部分监控信息;需要设置 INI 参数 ENABLE_MONITOR、MONITOR_SQL_EXEC、ENABLE_MONITOR_DMSQL 均为开启(即等于 1 时)才有实际意义。但是用完之后,需要关闭。此功能与 TRACE 区别在于对于查询语句集不打印结果集。
示例:
SQL> set autotrace traceonly
SQL> select * from sysobjects;
1115 rows got
1 #NSET2: [1, 1115, 397]
2 #PRJT2: [1, 1115, 397]; exp_num(17), is_atom(FALSE)
3 #CSCN2: [1, 1115, 397]; SYSINDEXSYSOBJECTS(SYSOBJECTS); btr_scan(1)
Statistics
-----------------------------------------------------------------
0 data pages changed
0 undo pages changed
70 logical reads
0 physical reads
0 redo size
163936 bytes sent to client
154 bytes received from client
2 roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
0 io wait time(ms)
2 exec time(ms)
已
注:重点关注 logical reads(逻辑读)和 physical reads(物理读)相应的指标值,并结合 rows processed 返回处理行数多少来分析。如果返回行数少(并且 bytes sent to client 总量不大),应尽可能减少 IO 开销,让执行计划选择正确的索引路径。
具体详情请参考: