首页 / 数据库 / MySQL / 创建自己的Oracle解释计划
1、解释计划当使用explain plan来为一个查询生成预期的执行计划时,输出将包括一下几种: SQL访问的每一张表; 访问每张表的方法; 每一个需要联结的数据源所使用的联结方法; 按次序列出的所有需要完成的运算; 计划中各步骤的谓语列表信息等等explain plan for select t1.name, t2.grade from table1 t1 left join table2 t2 on t1.id = t2.id where t1.id =704;Explained查询得:(与谓语有关的运算都会有*号标注)
select * from table(dbms_xplan.display);PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 2814340807--------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%--------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 1 | 141 | 8|* 1 | HASH JOIN OUTER | | 1 | 141 | 8| 2 | TABLE ACCESS BY INDEX ROWID| TABLE1 | 1 | 115 | 2|* 3 | INDEX RANGE SCAN | INDEX_TABLE1_ID | 1 | | 1|* 4 | TABLE ACCESS FULL | TABLE2 | 1 | 26 | 5--------------------------------------------------------------------------------Predicate Information (identified by operation id):--------------------------------------------------- 1 - access("T1"."ID"="T2"."ID"(+)) 3 - access("T1"."ID"=704) 4 - filter("T2"."ID"(+)=704)Note PLAN_TABLE_OUTPUT-------------------------------------------------------------------------------- - dynamic sampling used for this statement (level=2)22 rows selected2、系统解释计划表的内容
desc plan_tableName Type Nullable Default Comments----------------- -------------- -------- ------- --------STATEMENT_ID VARCHAR2(30) Y PLAN_ID NUMBER Y TIMESTAMP DATE Y REMARKS VARCHAR2(4000) Y OPERATION VARCHAR2(30) Y OPTIONS VARCHAR2(255) Y OBJECT_NODE VARCHAR2(128) Y OBJECT_OWNER VARCHAR2(30) Y OBJECT_NAME VARCHAR2(30) Y OBJECT_ALIAS VARCHAR2(65) Y OBJECT_INSTANCE INTEGER Y OBJECT_TYPE VARCHAR2(30) Y OPTIMIZER VARCHAR2(255) Y SEARCH_COLUMNS NUMBER Y ID INTEGER Y PARENT_ID INTEGER Y DEPTH INTEGER Y POSITION INTEGER Y COST INTEGER Y CARDINALITY INTEGER Y BYTES INTEGER Y OTHER_TAG VARCHAR2(255) Y PARTITION_START VARCHAR2(255) Y PARTITION_STOP VARCHAR2(255) Y PARTITION_ID INTEGER Y OTHER LONG Y OTHER_XML CLOB Y DISTRIBUTION VARCHAR2(30) Y CPU_COST INTEGER Y IO_COST INTEGER Y TEMP_SPACE INTEGER Y ACCESS_PREDICATES VARCHAR2(4000) Y FILTER_PREDICATES VARCHAR2(4000) Y PROJECTION VARCHAR2(4000) Y TIME INTEGER Y QBLOCK_NAME VARCHAR2(30) Y 其中常用字段说明创建自己的解释计划select id,parent_id, lpad(" ",level)||operation||" " ||options||" "||object_name as operation from plan_table start with id=0 connect by prior id = parent_id; 结果为 ID PARENT_ID OPERATION 0 SELECT STATEMENT 1 0 HASH JOIN OUTER 2 1 TABLE ACCESS BY INDEX ROWID TABLE1 3 2 INDEX RANGE SCAN INDEX_TABLE1_ID 4 1 TABLE ACCESS FULL TABLE2通过查看解释计划,可以针对性的修改自己的SQL语句来提升效率。比如修改或者增加索引等等查看执行计划与此相似,可以通过dbms.display_cursor函数来查看,也可以通过查询V$SQL_PLAN_STATISTICS_ALL中的相关字段来查看。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址