ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL执行计划

SQL执行计划

原创 Linux操作系统 作者:Jack_Miller 时间:2012-03-30 19:12:51 0 删除 编辑
查看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/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 还有好多要学的
请登录后发表评论 登录
全部评论

注册时间:2011-12-09

  • 博文量
    25
  • 访问量
    69997