Welcome 微信登录

首页 / 数据库 / 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本文永久更新链接地址