SQL调优之二:如何阅读执行计划

这里不讲每一步在做什么,那样子会让你很混乱。

刚开始阅读执行计划,只要遵循以下三个原则,一步一步读就可以了。

  1. 执行计划的阅读顺序是先从右往左,再从上往下。在看执行计划的时候,你先找到缩进最多的那一行,也就是最右,然后往回读。如果有多行缩进一样的,则遵循从上往下的顺序阅读。有些执行计划可能很复杂,有时候可能看错,可以通过UE的光标判断。
  2. 连接操作通常会有两个数据集,你阅读的顺序是从上往下。所以第一个数据集是驱动集,第二个数据集则是被探查表。在嵌套循环连接方式里,第一个数据集就是外部表。在哈希连接中,第一个数据集则用来构建哈希表。
  3. 同一时间只会做一次连接,所以任何时候都只需要考虑两个数据集和他们的连接操作。

比如以下的执行顺序是4, 5, 3, 6, 2, 9, 10, 8, 7, 1, 0,嵌套循环连接外部表是DEPARTMENTS, 哈希连接的哈希表是EMP_NAME_IX过滤出来的结果集

---------------------------------------------------------------------------------------------------
| Id  | Operation                     | Name              | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT              |                   |    10 |   570 |     7  (15)| 00:00:01 |
|*  1 |  HASH JOIN                    |                   |    10 |   570 |     7  (15)| 00:00:01 |
|   2 |   NESTED LOOPS                |                   |       |       |            |          |
|   3 |    NESTED LOOPS               |                   |    10 |   380 |     4   (0)| 00:00:01 |
|*  4 |     TABLE ACCESS FULL         | DEPARTMENTS       |     1 |    16 |     3   (0)| 00:00:01 |
|*  5 |     INDEX RANGE SCAN          | EMP_DEPARTMENT_IX |    10 |       |     0   (0)| 00:00:01 |
|   6 |    TABLE ACCESS BY INDEX ROWID| EMPLOYEES         |    10 |   220 |     1   (0)| 00:00:01 |
|   7 |   VIEW                        | index$_join$_004  |   107 |  2033 |     3  (34)| 00:00:01 |
|*  8 |    HASH JOIN                  |                   |       |       |            |          |
|   9 |     INDEX FAST FULL SCAN      | EMP_NAME_IX       |   107 |  2033 |     1   (0)| 00:00:01 |
|  10 |     INDEX FAST FULL SCAN      | EMP_EMP_ID_PK     |   107 |  2033 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------

Reference:

https://oracle-base.com/articles/9i/dbms_xplan#reading-execution-plans

 

posted @ 2019-09-14 11:59  Ryan_Wo  阅读(469)  评论(0编辑  收藏  举报