SQL执行计划

查看SQL的执行计划可用以下几种方式:
  • explain plan for sql_statement
  • SQLPLUS命令set autotrace on|traceonly
  • 第三方软件,如Toad,PL/SQL Developer
如何看懂一个执行计划呢,下面看这样一个执行计划:
select empno,ename,dname,loc from emp natural join dept where deptno=10;
Execution Plan
----------------------------------------------------------
Plan hash value: 568005898

----------------------------------------------------------------------------------------
| Id  | Operation                                         | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |                |     5 |   165 |     4   (0)| 00:00:01 |
|   1 |  NESTED LOOPS                              |                |     5 |   165 |     4   (0)| 00:00:01 |
|   2 |   TABLE ACCESS BY INDEX ROWID| DEPT       |     1 |    20 |     1   (0)| 00:00:01 |
|*  3 |    INDEX UNIQUE SCAN                   | PK_DEPT |     1 |        |     0   (0)| 00:00:01 |
|*  4 |   TABLE ACCESS FULL                    | EMP        |     5 |    65 |     3   (0)| 00:00:01 |
----------------------------------------------------------------------------------------

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

   3 - access("DEPT"."DEPTNO"=10)
   4 - filter("EMP"."DEPTNO"=10)

看执行计划时,首先从缩进最大的行读取,它是首先被执行的步骤。在上面的执行计划中,ID=3是最先被执行的,然后是2和4,当两行缩进一样时,最上面的先被执行,这里就是先执行2(3即是2的执行)再执行4,然后是1,最后执行0。即执行顺序是:
3 --2--4--1--0
执行过程可描述成:
首先从dept表中通过索引读取deptno=10的记录,然后全表扫描emp表,找到deptno=10的记录。然后重复这个过程直到dept表扫描完。这个过程就是nested loops。再dept表被扫描完之后,会产生一个结果集,将结果集返回给SELECT STATEMENT。
ID列带*号,说明后面会给出数据获取的方式:
3 - access("DEPT"."DEPTNO"=10),表示通过索引访问deptno=10的数据;
4 - filter("EMP"."DEPTNO"=10),在全部记录中过滤deptno=10的记录。
access表示这个谓词条件将会影响数据的访问路径(表还是索引),而filter表示谓词条件不会影响数据访问路径,只起到过滤作用。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25791987/viewspace-719976/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25791987/viewspace-719976/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值