察看执行计划和sql跟踪工具之explain plan


一、EXPLAIN PLAN:

目的是给出一个特定SQL的查询计划。Oracle查询计划可以在逻辑上分析SQL语句的优劣。

安装:


1、sqlplus " / as sysdba"

2、@$ORACLE_HOME/rdbms/admin/utlxplan.sql

3、create public synonym plan_table for plan_table;

4、grant select ,insert,update ,delete on plan_table to public

注:这里没有考虑安全性,plan_table对所有人都开发了增删改查权限,如果需要有安全性,可以针对某一个USER创建一个plan_table;

5、分析sql语句:(可以先select * from plan_table看看)

以oracle的scott用户登录(这个用户是被锁定的,使用前使用alter user scott account unlock;解锁)。

SQL> explain plan for SELECT * FROM emp, dept WHERE emp.deptno = dept.deptno  AND empno = 7782;

6、查看执行计划:

SQL> set linesize 700

SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql (或者使用select * from table(dbms_xplan.display);可以出来一样的效果)


 PLAN_TABLE_OUTPUT

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

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

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

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

|   1 |  NESTED LOOPS             |           |     1 |   117 |     3     (0)| 00:00:01 |

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

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

|   4 |   TABLE ACCESS BY INDEX ROWID| DEPT    |   409 | 12270 |     1     (0)| 00:00:01 |

|*  5 |    INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0     (0)| 00:00:01 |

----------------------------------------------------------------------------------------
注意看Operation的“缩进”。这个语句被解析成一棵“树”。这课树大约是

                1

               / \

              2   4

             /     \

            3       5

上面的数字,和PLAN_TABLE_OUTPUT中的“Id”是对应的。简单来说,就是这个语句有2,4构成;2又由3构成;4由5构成。


详细的SQL查询计划可以参阅其他书籍,作为初学者可以仅仅关注一下报告中的“TABLE ACCESS FULL”。

如果你有where子句还有这个TABLE ACCESS FULL出现,表明你缺少索引(这仅仅针对初学者,但是现实生活中却也能解决60-70%的问题)。


你可能感兴趣的:(数据库,执行计划,EXPLAIN,休闲,plan,sql跟踪)