iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >oracle执行计划解释
  • 700
分享到

oracle执行计划解释

2024-04-02 19:04:59 700人浏览 安东尼
摘要

(1).explain plan命令(不准)explain plan for select语句select * from table(dbms_xplan.display);(2).DBMS_XP

(1).explain plan命令(不准)

explain plan for select语句

select * from table(dbms_xplan.display);


(2).DBMS_XPLAN包

select * from table(dbms_xplan.display);      --必须在缓存,结果不准

select * from table(dbms_xplan.display_cursor(null,null,'advanced'));    --必须在缓存,准确

select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'));     --必须在缓存,查找sql_id,准确(select sql_text,sql_id,hash_value,child_cursor from v$sql where sql_text like 'select * from abc' );

select * from table(dbms_xplan.display_awr('sql_id'));     --在AWR报告中查找sql_id,准确


(3).autotrace开关(sqlplus使用)

set autotrace on


(4).10046事件,执行计划最准确

SQL> oradebug event 10046 trace name context forever,level 12      --开启10046事件

SQL> select * from abc where a >100;          --执行sql语句

SQL> oradebug tracefile_name              --查看生成的文件

SQL> oradebug event 10046 trace name context off          --关闭10046事件

[root@localhost ~]$ tkprof 10000.trc   20000.trc                 --将trc文件转换格式,可读性很高 



设置执行计划方法:

set autotrace off          默认值,关闭执行计划

set autotrace on explain     只显示执行计划

set autotrace on statistics   只显示执行计划统计信息

set autotrace on          显示执行计划和统计信息

set autotrace traceonly      与on相似,不显示语句的执行结果


1.oracle数据库访问数据的方法

(1).全表扫描(Full Table Scans,FTS)

(2).通过隐藏rowid字段扫描(Table Access by ROWID)

(3).索引范围扫描(Index range Scan)

(4).索引唯一扫描(Index unique scan)

(5).索引全扫描(Index full scan)

(6).索引快速扫描(Index fast full scan)


1).全表扫描

SQL> set autotrace on

SQL> select * from emp where comm=1400;

EMPNO ENAME    JOB   MGR HIREDATE    SAL     COMM    DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7654 MARTIN   SALESMAN  7698 28-SEP-81   1250   1400     30


Execution Plan

----------------------------------------------------------

Plan hash value: 3956160932

--------------------------------------------------------------------------

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------

|   0 | SELECT STATEMENT  |      |     1 |    38 |     3   (0)| 00:00:01 |

|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    38 |     3   (0)| 00:00:01 |

--------------------------------------------------------------------------


Predicate InfORMation (identified by operation id):

---------------------------------------------------

   1 - filter("COMM"=1400)

Access:表示条件的值将会影响数据的访问路径(表和索引)

Filter:表示条件的值不会影响数据的访问路径,只起过滤作用

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets        --读了多少个数据块

          7  consistent gets      --逻辑读(从buffer cache中读取的block数量)

          0  physical reads       --物理读(从磁盘中读取的block数量)

          0  redo size          --产生多少redo日志

       1028  bytes sent via SQL*Net to client   --客户端传入的字节数

        523  bytes received via SQL*Net from client  --服务端传入到客户端的字节数

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)       --排序占用的内存

          0  sorts (disk)        --排序占用的磁盘

          1  rows processed       --影响多少行

SQL>


2).rowid字段扫描

SQL> select * from emp where rowid='AAAVREAAEAAAACXAAN';

EMPNO ENAME     JOB        MGR HIREDATE       SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7934 MILLER     CLERK       7782 23-JAN-82     1300              10

Execution Plan

----------------------------------------------------------

Plan hash value: 1116584662

-----------------------------------------------------------------------------------

| Id  | Operation                  | Name | Rows  | Bytes | Cost (%CPU)| Time     |

-----------------------------------------------------------------------------------

|   0 | SELECT STATEMENT           |      |     1 |    38 |     1   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY USER ROWID| EMP  |     1 |    38 |     1   (0)| 00:00:01 |

-----------------------------------------------------------------------------------

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          1  consistent gets

          0  physical reads

          0  redo size

       1022  bytes sent via SQL*Net to client

        523  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

SQL>


3).索引范围扫描

SQL> create index in_sal on emp(sal);

Index created.

SQL> select * from emp where sal < 1000;

 EMPNO ENAME    JOB       MGR HIREDATE        SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

 7369 SMITH    CLERK     7902 17-DEC-80        800               20

 7900 JAMES    CLERK     7698 03-DEC-81        950               30

Execution Plan

----------------------------------------------------------

Plan hash value: 3065173639

--------------------------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |    38 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IN_SAL |     1 |       |     1   (0)| 00:00:01 |

--------------------------------------------------------------------------------------Predicate Information (identified by operation id):

---------------------------------------------------

   2 - access("SAL"<1000)

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          4  consistent gets

          0  physical reads

          0  redo size

       1115  bytes sent via SQL*Net to client

        523  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          2  rows processed

SQL>


(4).索引唯一扫描

SQL> select * from emp where empno=7566;

EMPNO ENAME      JOB        MGR HIREDATE       SAL       COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7566 JONES      MANAGER      7839 02-APR-81     2975               20


Execution Plan

----------------------------------------------------------

Plan hash value: 2949544139

--------------------------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     1 |    38 |     1   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     1   (0)| 00:00:01 |

|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)| 00:00:01 |

--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   2 - access("EMPNO"=7566)

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          2  consistent gets

          0  physical reads

          0  redo size

        892  bytes sent via SQL*Net to client

        512  bytes received via SQL*Net from client

          1  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          1  rows processed

SQL>


(5).索引全扫描

SQL> select * from emp where sal >2000 order by empno;        

EMPNO ENAME      JOB          MGR HIREDATE       SAL      COMM     DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

7566 JONES      MANAGER         7839 02-APR-81    2975              20

7698 BLAKE      MANAGER         7839 01-MAY-81    2850              30

7782 CLARK      MANAGER         7839 09-JUN-81    2450              10

7788 SCOTT      ANALYST         7566 19-APR-87    3000              20

7839 KING       PRESIDENT           17-NOV-81    5000              10

7902 FORD       ANALYST         7566 03-DEC-81    3000              20


6 rows selected.

Execution Plan

----------------------------------------------------------

Plan hash value: 4170700152

-------------------------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |    10 |   380 |     2   (0)| 00:00:01 |

|*  1 |  TABLE ACCESS BY INDEX ROWID| EMP    |    10 |   380 |     2   (0)| 00:00:01 |

|   2 |   INDEX FULL SCAN           | PK_EMP |    14 |       |     1   (0)| 00:00:01 |

--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   1 - filter("SAL">2000)

Statistics

----------------------------------------------------------

          1  recursive calls

          0  db block gets

          4  consistent gets

          0  physical reads

          0  redo size

       1263  bytes sent via SQL*Net to client

        523  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          0  sorts (memory)

          0  sorts (disk)

          6  rows processed

SQL> 


6)索引快速扫描


2.使用explain plan for查看执行计划

SQL> explain plan for select * from emp where sal > 3000;

Explained.

SQL> seletc * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT

---------------------------------------------------------------------------------------

Plan hash value: 3065173639

--------------------------------------------------------------------------------------

| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |

--------------------------------------------------------------------------------------

|   0 | SELECT STATEMENT            |        |     7 |   266 |     2   (0)| 00:00:01 |

|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     7 |   266 |     2   (0)| 00:00:01 |

|*  2 |   INDEX RANGE SCAN          | IN_SAL |     7 |       |     1   (0)| 00:00:01 |

-------------------------------------------------------------------------------------

Predicate Information (identified by operation id):


PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------------

   2 - access("SAL">3000)

14 rows selected.

SQL>

您可能感兴趣的文档:

--结束END--

本文标题: oracle执行计划解释

本文链接: https://www.lsjlt.com/news/41820.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle执行计划解释
    (1).explain plan命令(不准)explain plan for select语句select * from table(dbms_xplan.display);(2).DBMS_XP...
    99+
    2022-10-18
  • mysql的执行计划解释
    关于MySQL的执行计划,做个笔记,可以做为优化的依据,尽量将第四列 type优化到ref,至少要保证range方式,能用覆盖索引的要使用覆盖索引,然后possible_keys显示null不代表不使用...
    99+
    2022-10-18
  • Oracle如何通过注释改变执行计划
    小编给大家分享一下Oracle如何通过注释改变执行计划,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Oracle 通过注释改变执...
    99+
    2022-10-18
  • Oracle如何解读执行计划
    这篇文章给大家分享的是有关Oracle如何解读执行计划的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我先上一条语句,因为我觉得这条比较典型,所以我们就先用这条的执行计划来解读下执...
    99+
    2022-10-19
  • oracle sqlprofile 固定执行计划,并迁移执行计划
    sqlprofile固定执行计划 模拟10g 执行计划迁移至11g oracle数据库中,11g库用10g的执行计划,这里是把hint 全盘扫描的执行计划迁移  --1.准备阶段&nb...
    99+
    2022-10-18
  • Oracle查询执行计划
    执行计划(Execution Plan)也叫查询计划(Query Plan),它是数据库执行SQL语句的具体步骤和过程。SQL查询语句的执行计划主要包括: ● 访问表的方式。数据库通过索引或全表扫描等方式访问表中的数据。...
    99+
    2023-04-03
    Oracle查询执行计划 Oracle执行计划查询
  • Oracle执行计划绑定
    有时我们查询 gv$sql可以看出同一个SQL不同子游标的一些运行细节: selet t.inst_id,t.sql_id,t.child_number,t.plan_hash_value,t.last_...
    99+
    2022-10-18
  • 看懂Oracle执行计划
    一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二:怎样查看Oracle执行计划? 因为我一直用的PLSQL远程连接的公司数据库,所...
    99+
    2022-10-18
  • oracle 固定执行计划
    ---chenjch ...
    99+
    2022-10-18
  • 执行计划-1:获取执行计划
    看懂执行计划是作为处理数据库性能问题的必备技能之一,接下来一系列的文章我 会告诉你怎么去做。 我们会从一些文章开始讨论几种获取执行计划的方法,并且评估不同来源的执行计划最适合哪种场景。 完成上述的内容后我...
    99+
    2022-10-18
  • 详解 MySQL 执行计划
    EXPLAIN语句提供有关MySQL如何执行语句的信息。EXPLAIN与SELECT,DELETE,INSERT,REPLACE和UPDATE语句一起使用。 EXPLAIN为SELECT语句中使用的每个表返回...
    99+
    2022-05-10
    MySQL 执行计划
  • MySQL执行计划详解
    一、mysql执行计划介绍 在MySQL中,执行计划的实现是基于JOIN和QEP_TAB这两个对象。其中JOIN类表示一个查询语句块的优化和执行,每个select查询语句(即Query_block对象)在处理的时候,都会...
    99+
    2022-09-28
  • Oracle如何查看执行计划
    一、如何查看执行计划在Oracle数据库里,我们通常可以使用如下方法(包括但不限于)得到目标SQL的执行计划:explain plan 命令DBMS_XPLAN包SQLPLUS中的AUTOTRACE开关10...
    99+
    2022-10-18
  • Oracle里常见的执行计划
    本文介绍了Oracle数据库里常见的执行计划,使用的Oracle数据库版本为11.2.0.1。1、与表访问相关的执行计划Oracle数据库里与表访问有关的两种方法:全表扫描和ROWID扫描。反映在执行计划上...
    99+
    2022-10-18
  • Oracle获取执行计划方法
    获取执行计划的6种方法   1. explain plan for获取;   2. set autotrace on ;  &...
    99+
    2022-10-18
  • 看懂Oracle中的执行计划
       从事Oracle相关的工作,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近学习关于Oracle中SQL语句的执行计划的相关内容。下面是文章的目录结构: ...
    99+
    2022-10-18
  • Oracle 查看执行计划问题
    一、描述在查看执行计划测试的过程中遇到使用dbms_xplan.display无法查看执行计划,发现是因为之前在测试的过程中打开了set autot on,关闭后(set autot off) ,执行计划可...
    99+
    2022-10-18
  • 查看oracle 真实执行计划
    一共3个step;step1:在sql执行时,增加hint:   step2:查出sql的sql id:  select * from v$sql s wher...
    99+
    2022-10-18
  • oracle查看执行计划之DBMS_XPLAN
        使用DBMS_XPLAN包中的方法是在oracle数据库中得到目标SQL的执行计划的另一种方法。针对不同的应用场景吗,你可以选择如下四种方法中的一种:  &n...
    99+
    2022-10-18
  • Oracle Study--Oracle SQL执行计划查看(MindMap)
    Oracle Study--Oracle SQL执行计划查看(MindMap) ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作