首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 执行计划步骤执行顺序深度解析:树形结构与行源流动

     編輯:Oracle 資料庫基礎

核心概念

  • 行源:每步返回的行集合,供下一步消费或最终返回客户端。
  • 存取路径:从数据文件物理读取数据的步骤 (如全表扫描、索引扫描)。
  • 操作步骤:对行源进行连接、排序、过滤等逻辑处理。

执行顺序铁律

Oracle 先执行树形计划中的叶子节点 (最深层),自底向上逐级返回行源给父节点。 编号仅为显示顺序,不代表执行先后。

图示案例演练

执行计划树结构:
          1 FILTER
         / \
        2   6 TABLE ACCESS FULL SALGRADE
       / \
      3   4 TABLE ACCESS BY ROWID DEPT
         /
        5 INDEX UNIQUE SCAN PK_DEPTNO
       /
      3 TABLE ACCESS FULL EMP

实际执行流程

  1. 启动 Step 3:全表扫描 EMP,逐行返回行源给 Step 2。
  2. 对 Step 3 每行:
    ▸ 执行 Step 5:索引唯一扫描 PK_DEPTNO,取 ROWID。
    ▸ 执行 Step 4:按 ROWID 访问 DEPT,返回行。
    ▸ 执行 Step 2:嵌套循环连接 (NL),将 EMP 行与 DEPT 行拼接,返回给 Step 1。
    ▸ 执行 Step 6:全表扫描 SALGRADE,若有行返回 Step 1。
    ▸ 执行 Step 1:过滤器,剔除 Step 6 匹配的行,最终结果返回客户端。

两类父节点触发机制

类型触发条件典型操作优化目标建议
流水线式子节点返回单行即可启动表访问、索引访问、NL 连接、过滤器FIRST_ROWS (快速首行响应)
阻塞式需子节点全部行就绪才能启动排序、排序合并连接 (SMJ)、聚合、分析函数ALL_ROWS (吞吐量最大化)

并行执行补充

真实环境中叶子节点 (如 Step 3/5/4) 可能由多个并行进程 (PX) 同时执行,树形计划无法直观体现并行顺序,需查看 V$PX_SESSION 或 DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALL') 获取并行执行时间线。

实用技巧

  • 使用 DBMS_XPLAN.DISPLAY 格式化输出,含 COST、BYTES、PREDICATE 等关键信息。
  • 关注 ACCESS 与 FILTER 谓词区别:ACCESS 为索引/分区裁剪条件,FILTER 为表访问后过滤条件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved