欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Oracle 执行计划

程序员文章站 2022-06-01 22:15:59
...

  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)语句中连接操作所影响到的各表的连接方法。