DM数据库执行计划中具体的执行顺序

DM数据库执行计划的先后顺序分析

-- 建表导入数据
CREATE TABLE TEST1(ID INT,ID1 INT,ID2 INT,ID3 INT);
INSERT INTO TEST1
SELECT DBMS_RANDOM.VALUE(1,10000),
DBMS_RANDOM.VALUE(1,10000),
DBMS_RANDOM.VALUE(1,10000),
DBMS_RANDOM.VALUE(1,10000) 
FROM DUAL CONNECT BY LEVEL <= 10000;
COMMIT;
-- 查看执行计划
EXPLAIN 
SELECT ID,ID1 
FROM TEST1 A
WHERE
A.ID = 5
OR
(A.ID = 7 AND A.ID1 = 11 AND A.ID2 < 15)
OR
A.ID1 NOT IN (10,11);

执行计划图示如下
在这里插入图片描述

执行计划文本如下
1 #NSET2: [6, 9751, 20]
2 #PRJT2: [6, 9751, 20]; exp_num(3), is_atom(FALSE)
3 #UNION FOR OR2: [6, 9751, 20]; key_num(1)
4 #UNION FOR OR2: [3, 251, 20]; key_num(1)
5 #SLCT2: [1, 250, 20]; A.ID = 5
6 #CSCN2: [1, 10000, 20]; INDEX33555454(TEST1 as A)
7 #SLCT2: [1, 1, 20]; (A.ID = 7 AND A.ID1 = 11 AND A.ID2 < 15)
8 #CSCN2: [1, 10000, 20]; INDEX33555454(TEST1 as A)
9 #HASH RIGHT SEMI JOIN2: [1, 9500, 20]; n_keys(1) (ANTI), KEY(DMTEMPVIEW_16789394.colname=A.ID1) KEY_NULL_EQU(0)
10 #CONST VALUE LIST: [1, 2, 4]; row_num(2), col_num(1),
11 #CSCN2: [1, 10000, 20]; INDEX33555454(TEST1 as A)

规则:不同缩进整体是遵循先下后上,相同缩进遵循先上后下。根据下边详细步骤再理解前边这句话。

从第一行开始一直向下看,关注#号的缩进程度,观察到第一个出现并列的缩进,第4行和第9行
那将执行计划分为两部分4~8 和 9~11,两部分最外层缩进相同,两部分之间遵循先上后下

先做4到8,继续按向下找缩进相同的行是第5行,第7行,先5后7,5和7各自下边只有1个算子
4到8内的执行顺序就是 6>5>8>7>4
4 #UNION FOR OR2: [3, 251, 20]; key_num(1)
5 #SLCT2: [1, 250, 20]; A.ID = 5
6 #CSCN2: [1, 10000, 20]; INDEX33555454(TEST1 as A)
7 #SLCT2: [1, 1, 20]; (A.ID = 7 AND A.ID1 = 11 AND A.ID2 < 15)
8 #CSCN2: [1, 10000, 20]; INDEX33555454(TEST1 as A)

再看9到11,同样方法找相同缩进的行是10,11 … 10,11下再无算子
9到11内的执行顺序是 10>11>9

4和9并列,先上后下,4到11的步骤就是
6>5>8>7>4>10>11>9

剩下的1,2,3。与4到11步没有并列缩进,先下后上
所以整体的执行步骤就是
6>5>8>7>4>10>11>9>3>2>1

更多资讯请上达梦技术社区了解:https://eco.dameng.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值