首页 > 解决方案 > 哪一个是执行计划的驱动表?

问题描述

在Oracle数据库中,当我得到执行计划或解释计划时,哪个行源被认为是驱动表?它是在另一个之上的吗?或者嵌套连接、合并连接等是否会发生这种变化?此外,如果我通过 SQL Developer 获得执行计划,或者解释计划命令等是否会改变?我知道优化器选择较小的表作为驱动表。但我知道,它并不总是这样做。所以我对此感到困惑。顺便说一句,我问的是基于成本的优化。因此,如果您可以在 CBO 上进行解释,将不胜感激。例如在下面的计划中,哪一张是驾驶台?我们如何理解它是驱动表?是因为它在上面吗?此致

select * from hr.employees e join hr.departments d on d.department_id = 
e.department_id where d.department_name like 'A%'

Plan hash value: 1021246405

--------------------------------------------------------------------------------------------------
| Id  | Operation                    | Name              | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT             |                   |       |       |     4 (100)|          |
|   1 |  NESTED LOOPS                |                   |    10 |   900 |     4   (0)| 00:00:01 |
|   2 |   NESTED LOOPS               |                   |    10 |   900 |     4   (0)| 00:00:01 |
|*  3 |    TABLE ACCESS FULL         | DEPARTMENTS       |     1 |    21 |     3   (0)| 00:00:01 |
|*  4 |    INDEX RANGE SCAN          | EMP_DEPARTMENT_IX |    10 |       |     0   (0)|          |
|   5 |   TABLE ACCESS BY INDEX ROWID| EMPLOYEES         |    10 |   690 |     1   (0)| 00:00:01 |
--------------------------------------------------------------------------------------------------

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

   3 - filter("D"."DEPARTMENT_NAME" LIKE 'A%')
   4 - access("D"."DEPARTMENT_ID"="E"."DEPARTMENT_ID")

Note
-----
   - this is an adaptive plan

标签: oracle11goracle-sqldevelopersql-tuning

解决方案


推荐阅读