Oracle 执行计划

  1.创建执行计划表

        脚本位于:%ORACLE_HOME%/product/11.1.0/db_1/RDBMS/ADMIN/utlxplan.sql

   

--PLAN_TABLE
create table 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    numeric,
        object_type        varchar2(30),
        optimizer          varchar2(255),
        search_columns     number,
        id                 numeric,
        parent_id          numeric,
        depth              numeric,
        position           numeric,
        cost               numeric,
        cardinality        numeric,
        bytes              numeric,
        other_tag          varchar2(255),
        partition_start    varchar2(255),
        partition_stop     varchar2(255),
        partition_id       numeric,
        other              long,
        distribution       varchar2(30),
        cpu_cost           numeric,
        io_cost            numeric,
        temp_space         numeric,
        access_predicates  varchar2(4000),
        filter_predicates  varchar2(4000),
        projection         varchar2(4000),
        time               numeric,
        qblock_name        varchar2(30),
        other_xml          clob
);

 

        也可以创建公共计划表

         1.通过运行utlxplan.sql脚本,以自己选择的模式创建计划表。

         2.创建计划表的公共同名对象。

         3.将对计划表的访问授权为公共。 

CREATE PUBLIC SYNONYM plan_table FOR plan_table;
GRANT SELECT,INSERT,UPDATE,DELETE ON plan_table TO PUBLIC;

 

    2.计划表中常用列:

 列  描述
 statement_id  赋给执行计划的名称
 operation

 执行的数据库操作,可以是:

  •     扫描表
  •     扫描索引
  •     使用索引访问表行
  •     连接两个表
  •     排序行集合

例如,访问表的操作是TABLE ACCESS

 options  操作中选项的名称。例如,全表扫描的选项是FULL
 object_name  操作中引用的数据库对象的名称
 object_type  对象的属性。例如,唯一索引的属性为UNIQUE
 id  执行计划中赋给该操作的数字
 parent_id  执行计划中当前步骤的父数字。parent_id值与父步骤中的id值有关
 position  具有相同parent_id的步骤的处理顺序
 cost  操作的工作单元的估计值。基于成本的优化使用磁盘I/O、CPU使用率和内存利用率作为工作单元。所以,成本是磁盘I/O数目和执行操作所使用的CPU和内存数量的估计值

 

 

 

3.创建执行计划

EXPLAIN PLAN SET STATEMENT_ID = 'TEST_CONTENT' FOR
  SELECT C.ID, C.TITLE, C.SUBHEAD, C.SUMMARY
    FROM TEST_CONTENT C
   WHERE EXISTS (SELECT 1 FROM TEST_SORT S WHERE S.ID = C.SORT_ID);

 

 

 

 

 

 

 

 

 

4.查看执行计划

SELECT ID || DECODE(ID, 0, '', LPAD(' ', 2 * (LEVEL - 1))) || ' ' ||
       OPERATION || ' ' || OPTIONS || ' ' || OBJECT_NAME || ' ' || OBJECT_TYPE || ' ' ||
       DECODE(COST, NULL, '', 'Cost = ' || POSITION) AS EXECUTION_PLAN
  FROM PLAN_TABLE
CONNECT BY PRIOR ID = PARENT_ID
       AND STATEMENT_ID = '&v_statement_id'
 START WITH ID = 0
        AND STATEMENT_ID = '&v_statement_id';

 

将第二条SQL语句保存在 :%ORACLE_HOME%/product/11.1.0/db_1/RDBMS/ADMIN/explain_plan.sql,下次直接使用。

 

5.包含表连接的执行计划

EXPLAIN PLAN SET STATEMENT_ID = 'TEST_CONTENT2' FOR
SELECT S.ID AS SID, S.NAME, C.TITLE, SUBHEAD, SUMMARY   
  FROM TEST_CONTENT C, TEST_SORT S   
 WHERE C.SORT_ID = S.ID   
   AND C.SORT_ID = 170 

 执行上面的查看执行计划语句查看执行计划。

 

6.执行计划包括

      1)语句所引用的表的顺序

      2)语句所涉及的表的访问方法

      3)语句中连接操作所影响到的各表的连接方法。

你可能感兴趣的:(oracle)