Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1183303
  • 博文数量: 398
  • 博客积分: 10110
  • 博客等级: 上将
  • 技术积分: 4055
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-23 20:01
个人简介

新博客http://www.cnblogs.com/zhjh256 欢迎访问

文章分类

全部博文(398)

文章存档

2012年(1)

2011年(41)

2010年(16)

2009年(98)

2008年(142)

2007年(100)

我的朋友

分类: Oracle

2008-01-06 21:52:46

EXPLAIN PLAN是一个Oracle SQL命令用来解析相关的SQL,然后存储从优化器计算而来的执行计划到恰当的表。

SQL> explain plan for

  2  select * from test_card where year=2005;

 

Explained

当然对于执行相同的查询,优化器不一定需要返回相同的执行计划。主要原因包括:

·EXPLAIN PLAN不会使用绑定变量,而绑定变量会影响优化器选择的执行计划;

·收集了统计,但是已存在的计划不会变无效;

·执行EXPLAIN PLAN的会话的环境不一定相同;

·绑定变量数据类型的变化;

9i+下,最好使用DBMS_XPLAN查询PLAN_TABLE

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)

该输出会显示比utlxpls.sql更加详细的信息,其中包括了CPU是否考虑在内等。

如果声明了statement_id,则使用:

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE','id','ALL'))

9i+下包含了以下列:

CPU_COST            NUMBER(38)
IO_COST             NUMBER(38)
TEMP_SPACE          NUMBER(38)
ACCESS_PREDICATES   VARCHAR2(4000)
FILTER_PREDICATES   VARCHAR2(4000)

10GR2还包含了如下:

PROJECTION          VARCHAR2(4000)
TIME                NUMBER(38,10)
QBLOCK_NAME         VARCHAR2(30)

 

关于SYS.PLAN_TABLE$V$SQL_PLAN

       PLAN_TABLE$是一个全局临时表,可以使用PLAN_TABLE为其创建一个同义词避免每个用户都需要这样一个计划表。并且这作为了10gRx标准的一部分存在。

阅读(1423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~