在Oracle的调优中, 查看SQL的执行计划是非常重要和常用的方法, 在AnySQL中提供了几个方便地查看SQL执行计划的方法, 让我们来体验一下.
第一种情况是获得一个SQL语句的执行计划, 可以用EXPLAIN PLAN命令, 这里的命令稍不同于SQL*Plus中的, 没有"FOR"关键字.
ASQL> EXPLAIN PLAN SELECT * FROM T_HASH;
SQLPLAN COST CARD KBYTE PS PE
------------------------------------------ ---- ----- ----- -- --
0 SELECT STATEMENT Optimizer=RULE 20 10000 59
1 0 PARTITION HASH (ALL) 1 8
2 1 TABLE ACCESS (FULL) OF T_HASH 20 10000 59 1 8
第二种情况是知道一个SQL的哈希值(Hash Value), 然后从V$SQL_PLAN中的执行计划(正在使用的), 可以使用定制命令"ORA PLAN 哈希值"来完成.
ASQL> ORA PLAN 821132411
SQLPLAN COST CARD KBYTE PS PE
----------------------------------------- ---- ----- ----- -- --
0 SELECT STATEMENT Optimizer=RULE
20
1 0 PARTITION HASH (ALL) 1 8
2 1 TABLE ACCESS (FULL) OF T_HASH 20 10000 59 1 83 rows returned.
第二种情况是知道一个SQL的哈希值(Hash Value), 然后希望运行EXPLAIN PLAN命令来在当前环境下重新生成执行计划, 可以使用定制命令"ORA XPLAN 哈希值"来完成, 这个命令会首先打印现SQL语句, 然后显示它的执行计划.
ASQL> ORA XPLAN 821132411
SELECT * FROM T_HASH
SQLPLAN COST CARD KBYTE PS PE
------------------------------------------ ---- ----- ----- -- --
0 SELECT STATEMENT Optimizer=RULE 20 10000 59
1 0 PARTITION HASH (ALL) 1 8
2 1 TABLE ACCESS (FULL) OF T_HASH 20 10000 59 1 8
在STATSPACK或AWR中一般不会显示完整的SQL语句, 但肯定会告诉你一个哈希值, 这时你就可以方便地使用这些命令来进行调优了, 当然这些命令只是提供一些方便而已.