阅读oracle执行计划的方法: 先从最开头一直往右看,直到看到最右边的并列的地方,对于不并列的,靠右的先执行:对于并列的,靠上的先执行。 即并列的缩进块,从上往下执行,非并列的缩进块,从下往上执行。 如下示例: Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL' 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL' 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) 不妨假设最右边的数据为行号,语句执行是按块进行的。 从上述执行计划的开头一直往右看,直到找到最右边并列的。也就是从SELECT STATEMENT开始往右找。 找到一级缩进块,只有一个,没有优先级可言,如下: 1 0 NESTED LOOPS 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL' 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL' 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) 再在一级缩进块中找二级缩进块,找到两个,如下: 第一个二级缩进块: 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL' 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) 第二个二级缩进块: 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL' 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) 按照并列块从上往下执行的原则,第一个二级缩进块的所有语句将优先于第二个二级缩进块的语句执行。 而两个二级缩进块执行完,才能执行一级缩进块,这是因为非并列的缩进块,从下往上执行。 再在二级缩进块中找三级缩进块。 第一个二级缩进块中只有一个三级缩进块,如下: 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) 由于没有更低层级的缩进块,因此,该块最先执行。然后执行二级缩进块。 第二个二级缩进块中也只有一个三级缩进块,如下: 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) 二级缩进块中没有更低层次的缩进块了,因此,执行完第一个二级缩进块的所有语句后,便执行此三级缩进块,再执行对应的二级缩进块。 两个二级缩进块均执行完成后,再执行整个一级缩进块。 因此,若按行排序,语句的执行顺序便是: 3 -> 2 -> 5 -> 4 -> 1, 即: 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) -> 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL' -> 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) -> 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL' -> 1 0 NESTED LOOPS 执行计划顺序的理论解释: 执行计划是按一定规则显示的,如下: Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_HOST_BATCH_DTL' 3 2 INDEX (RANGE SCAN) OF 'XIE2TB_HOST_BATCH_DTL' (NON-UNIQUE) 4 1 TABLE ACCESS (BY INDEX ROWID) OF 'TB_BATCH_TRAN_CTRL' 5 4 INDEX (UNIQUE SCAN) OF 'SYS_C0034652' (UNIQUE) 第一个列是步骤的ID (相当于我们说的行号) 第二个列是父步骤的ID 第三个列是该步骤要进行的操作。 在执行过程中,父步骤依赖于子步骤。只有对应的所有子步骤执行完,才能执行父步骤。 因此,步骤0的子步骤为1, 步骤1的子步骤为2,4, 步骤2子步骤为3,步骤4的子步骤为5, 步骤3,5没有子步骤了。 故步骤3所在的模块,或步骤5所在的模块先执行。但步骤3排在步骤5的前面,故步骤3所在的模块先执行。因此,顺序仍是: 3 -> 2 -> 5 -> 4 -> 1
阅读oracle执行计划的方法
来源:这里教程网
时间:2026-03-03 16:01:37
作者:
编辑推荐:
- 阅读oracle执行计划的方法03-03
- Oracle RPM包安装Oracle19c03-03
- 微信小程序直播怎么弄03-03
- 只有select权限也能锁表?read and select03-03
- oracle基于物化视图的数据同步03-03
- 美创科技运维日记|Oracle字段长度引起的思考length()和lengthb()03-03
- merge into 和 update 的效率对比03-03
- 初始化参数游标之cursor_sharing03-03
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- Oracle RPM包安装Oracle19c
Oracle RPM包安装Oracle19c
26-03-03 - 微信小程序直播怎么弄
微信小程序直播怎么弄
26-03-03 - 只有select权限也能锁表?read and select
只有select权限也能锁表?read and select
26-03-03 - 美创科技运维日记|Oracle字段长度引起的思考length()和lengthb()
- Oracle 修改集群的资源属性(依赖关系)
Oracle 修改集群的资源属性(依赖关系)
26-03-03 - Oracle OCR/VF磁盘组的故障恢复
Oracle OCR/VF磁盘组的故障恢复
26-03-03 - Oracle 11g RAC + DG安装详解--04
Oracle 11g RAC + DG安装详解--04
26-03-03 - 如何选择合适的小型项目管理工具?
如何选择合适的小型项目管理工具?
26-03-03 - Oracle ASM磁盘组的卸载与删除
Oracle ASM磁盘组的卸载与删除
26-03-03 - pl/sql developer的一个小问题
pl/sql developer的一个小问题
26-03-03
