|
多谢楼上的测试:
这个可能是因为你的程序,没有按照执行计划这个功能。
怎么才能知道自己的数据库是否有执行计划功能呢?
有个最简单的方法是:你尝试运行 select * from PLAN_TABLE,如果报错提示plan_table不存在,说明你没有安装该功能,
不过一般情况下,在安装数据库的时候会默认安装的。也许你用的是Linux,这个下面是否默认安装,我不清楚。
安装方法也很简单:
要使用EXPLAIN首先要执行相应的脚本,创建出Explain_plan表。
具体脚本执行如下:
$ORACLE_HOME/rdbms/admin/utlxplan.sql 该脚本后会生成一个表这个程序会创建一个名为plan_table的表。
实际上plan_table并不是一个表,它是一个同义词;
其代码为:
CREATE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE$
/
目的是为了让每个用户都能共享使用,而且SYS.PLAN_TABLE$这个表还是个回话级的临时表;
其代码是:
CREATE GLOBAL TEMPORARY TABLE SYS.PLAN_TABLE$
(
STATEMENT_ID VARCHAR2(30),
PLAN_ID NUMBER,
TIMESTAMP DATE,
REMARKS VARCHAR2(4000),
OPERATION VARCHAR2(30),
OPTIONS VARCHAR2(255),
OBJECT_NODE VARCHAR2(128),
OBJECT_OWNER VARCHAR2(30),
OBJECT_NAME VARCHAR2(30),
OBJECT_ALIAS VARCHAR2(65),
OBJECT_INSTANCE NUMBER,
OBJECT_TYPE VARCHAR2(30),
OPTIMIZER VARCHAR2(255),
SEARCH_COLUMNS NUMBER,
ID NUMBER,
PARENT_ID NUMBER,
DEPTH NUMBER,
POSITION NUMBER,
COST NUMBER,
CARDINALITY NUMBER,
BYTES NUMBER,
OTHER_TAG VARCHAR2(255),
PARTITION_START VARCHAR2(255),
PARTITION_STOP VARCHAR2(255),
PARTITION_ID NUMBER,
OTHER LONG,
OTHER_XML CLOB,
DISTRIBUTION VARCHAR2(30),
CPU_COST NUMBER,
IO_COST NUMBER,
TEMP_SPACE NUMBER,
ACCESS_PREDICATES VARCHAR2(4000),
FILTER_PREDICATES VARCHAR2(4000),
PROJECTION VARCHAR2(4000),
TIME NUMBER,
QBLOCK_NAME VARCHAR2(30)
)
ON COMMIT PRESERVE ROWS
NOCACHE
/
如果你不想用 $ORACLE_HOME/rdbms/admin/utlxplan.sql 来安装该功能,用我上面提供的两个脚本代码,也许也能达到同样效果(具体我没有试过) |
|