设为首页 收藏本站
查看: 1196|回复: 0

[经验分享] oracle执行计划解释

[复制链接]

尚未签到

发表于 2018-9-7 11:50:56 | 显示全部楼层 |阅读模式
  设置执行计划方法:
  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
  --------------------------------------------------------------------------

  |>  --------------------------------------------------------------------------
  |   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>  ---------------------------------------------------
  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>  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
  -----------------------------------------------------------------------------------

  |>  -----------------------------------------------------------------------------------
  |   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>  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
  --------------------------------------------------------------------------------------

  |>  --------------------------------------------------------------------------------------
  |   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>  ---------------------------------------------------
  2 - access("SAL"  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
  --------------------------------------------------------------------------------------

  |>  --------------------------------------------------------------------------------------
  |   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>  ---------------------------------------------------
  2 - access("EMPNO"=7566)
  Statistics
  ----------------------------------------------------------
  1  recursive calls
  0  db block gets
  2  consistent gets
  0  physical reads

  0  redo>  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
  -------------------------------------------------------------------------------------

  |>  --------------------------------------------------------------------------------------
  |   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>  ---------------------------------------------------
  1 - filter("SAL">2000)
  Statistics
  ----------------------------------------------------------
  1  recursive calls
  0  db block gets
  4  consistent gets
  0  physical reads

  0  redo>  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
  --------------------------------------------------------------------------------------

  |>  --------------------------------------------------------------------------------------
  |   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>  PLAN_TABLE_OUTPUT
  ----------------------------------------------------------------------------------------
  2 - access("SAL">3000)
  14 rows selected.
  SQL>


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-566012-1-1.html 上篇帖子: PLSQLDeveloper连接远程Oracle数据库 下篇帖子: oracle vote disk和ocr disk备份与恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表