首页 > 数据库 > explain plan设置

explain plan设置

2006年6月2日 2,446 views 发表评论 阅读评论
explain plan
explain是一个sql命令,使用该命令可以得知对于一个特定的sql查询,其查询计划是什么.加入你打算用当前的设置在当前会话中执行查询,重要的是要抓住该计划被使用的那一点.
explain不能告诉你过去运行的一个特定的查询实际使用的是什么计划,因为查询执行已经发生在一个带有完全不同设置的会话中.
设置explain lan
oracle 9i
sql> @?/rdbms/admin/utlxplan                     #create table plan_table
explain plan
[set statement_id=’text’ ]
[into [owner.]table_name]
for statement;
set statement_id允许将多个计划存储在计划表中.ownner.table_name允许你使用除plan_table以外的表.
测试:
CREATE TABLE t
(
collection_year int,
data            varchar2(25)
)
PARTITION BY RANGE (COLLECTION_YEAR) (
PARTITION PART_99 VALUES LESS THAN (2000),
PARTITION PART_00 VALUES LESS THAN (2001),
PARTITION PART_01 VALUES LESS THAN (2002),
PARTITION PART_02 VALUES LESS THAN (2003),
PARTITION the_rest VALUES LESS THAN (MAXVALUE)
)
;
delete from plan_table;
explain plan for
select * from t where collection_year = 2002;
@?/rdbms/admin/utlxpls
9i和10g的执行计划输出可能有些不一致.
输出如下:
SQL> @?/rdbms/admin/utlxpls
PLAN_TABLE_OUTPUT
———————————————————————————————————————————–
Plan hash value: 2931986080
———————————————————————————————–
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
———————————————————————————————–
|   0 | SELECT STATEMENT       |      |     1 |    27 |     2   (0)| 00:00:01 |       |       |
|   1 |  PARTITION RANGE SINGLE|      |     1 |    27 |     2   (0)| 00:00:01 |     4 |     4 |
|*  2 |   TABLE ACCESS FULL    | T    |     1 |    27 |     2   (0)| 00:00:01 |     4 |     4 |
———————————————————————————————–
Predicate Information (identified by operation id):
—————————————————
2 – filter(“COLLECTION_YEAR”=2002)
Note
—–
– dynamic sampling used for this statement
18 rows selected.
对比下autotrace的输出.autotrace可以输出详细的统计信息.但这里只查看下详细计划.
建议用explain 或者包dbms_xplan .
10g早期的版本explain的信息会比autotrace的信息更全面.
set autotrace traceonly explain
select * from t where collection_year = 2002;
SQL> set autotrace traceonly explain;
SQL> select * from t where collection_year=2002;
Execution Plan
———————————————————-
Plan hash value: 2931986080
———————————————————————————————–
| Id  | Operation              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
———————————————————————————————–
|   0 | SELECT STATEMENT       |      |     1 |    27 |     2   (0)| 00:00:01 |       |       |
|   1 |  PARTITION RANGE SINGLE|      |     1 |    27 |     2   (0)| 00:00:01 |     4 |     4 |
|*  2 |   TABLE ACCESS FULL    | T    |     1 |    27 |     2   (0)| 00:00:01 |     4 |     4 |
———————————————————————————————–
Predicate Information (identified by operation id):
—————————————————
2 – filter(“COLLECTION_YEAR”=2002)
Note
—–
– dynamic sampling used for this statement
set autotrace off
附录一些说明:
utlxplan.sql(UtiLility explain Plan table)
utlxplp.sql (UtiLility explain plan parallel) 显示计划表的内容,其中包括并行查询计划的信息细节
utlxpls.sql (UtiLility explain Plan serial) 显示普通的,串行(非并行)计划的计划表内容.
以上为9i的说明.
 » 转载保留版权:老陈 » 《explain plan设置》
 » 如果喜欢可以: 点此订阅本站
分类: 数据库 标签: ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.