谓词推入是查询优化的一种策略,它将SQL语句中的过滤条件(即WHERE子句中的条件)推入到视图中,提前过滤数据减少数据处理量,降低SQL所需的I/O和CPU开销,从而提高查询性能。达梦中会通过参数FILTER_PUSH_DOWN来控制谓词下推策略,通常情况下CBO优化器会根据代价和索引条件自动完成谓词推入,前段时间遇到的一个案例,稍有不同的是需要经过两次谓词推入。
WITH START_DATE AS
(SELECT '2024-01-01' AS INIT_DATE FROM DUAL)
,
ACC AS
(SELECT '1' AS STOCK_ACCOUNT FROM DUAL
UNION
SELECT '2' AS STOCK_ACCOUNT FROM DUAL
UNION
SELECT '3' AS STOCK_ACCOUNT FROM DUAL
UNION
SELECT '4' AS STOCK_ACCOUNT FROM DUAL
UNION
SELECT '5' AS STOCK_ACCOUNT FROM DUAL
)
,
DETAIL AS
( SELECT A.*
FROM HIS.DETAIL A,
ACC
WHERE A.TRAD_DATE>=(SELECT * FROM START_DATE)
AND A.SEC_ACCT=ACC.STOCK_ACCOUNT
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%A%'
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%B%'
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%C%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%A%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%B%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%C%'
)
,
PHONE AS
(SELECT DISTINCT REG_MOB AS MOB FROM DETAIL WHERE LENGTH(REG_MOB)>6
UNION
SELECT DISTINCT ACTUL_USE_MOB AS MOB FROM DETAIL WHERE LENGTH(ACTUL_USE_MOB)>6
UNION
SELECT DISTINCT MOB FROM DETAIL WHERE LENGTH(MOB)>6
)
SELECT
DISTINCT A.OAP_ACCT_NBR AS A,
A.SEC_ACCT AS B,
A.CUST_NAME AS C,
NVL(P1.MOB,NVL(P2.MOB,P3.MOB)) AS D,
'A' AS 类型
FROM HIS.DETAIL A
LEFT JOIN PHONE P1
ON A.REG_MOB=P1.MOB
LEFT JOIN PHONE P2
ON A.MOB=P2.MOB
LEFT JOIN PHONE P3
ON A.ACTUL_USE_MOB=P3.MOB
WHERE A.TRAD_DATE>=(SELECT * FROM START_DATE)
AND (P1.MOB IS NOT NULL
OR P2.MOB IS NOT NULL
OR P3.MOB IS NOT NULL)
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%A%'
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%B%'
AND IFNULL(CUST_CAPI_SETL_BIZ_TYPE_DESC,'0') NOT LIKE '%C%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%A%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%B%'
AND IFNULL(SUMR_INFO,'0') NOT LIKE '%C%'
;
1 #NSET2: [63148, 1, 11049] 2 #PIPE2: [63148, 1, 11049] 3 #PIPE2: [63129, 1, 11049] 4 #PRJT2: [63122, 1, 11049]; exp_num(5), is_atom(FALSE) 5 #DISTINCT: [63122, 1, 11049] 6 #PRJT2: [63058, 3, 11049]; exp_num(5), is_atom(FALSE) 7 #UNION FOR OR2: [63058, 3, 11049]; key_num(4), outer_join(-) 8 #UNION FOR OR2: [38778, 2, 11049]; key_num(4), outer_join(-) 9 #HASH RIGHT JOIN2: [14501, 1, 11049]; key_num(1), ret_null(0), KEY(P3.MOB=A.ACTUL_USE_MOB) 10 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 11 #HASH RIGHT JOIN2: [14499, 1, 7514]; key_num(1), ret_null(0), KEY(P2.MOB=A.MOB) 12 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 13 #HASH2 INNER JOIN: [14497, 1, 3979]; KEY_NUM(1); KEY(P1.MOB=A.REG_MOB) KEY_NULL_EQU(0) 14 #SLCT2: [1, 1, 3535]; NOT(P1.MOB IS NULL) 15 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 16 #PARALLEL: [12134, 19886755, 444]; scan_type(FULL), key_num(0, 0, 0), simple(0) 17 #SLCT2: [12134, 19886755, 444]; (A.TRAD_DATE >= '2024-01-01' AND NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%B%') AND NOT(var1 LIKE '%C%')... ) 18 #CSCN2: [12134, 59074854, 444]; INDEX33564250(DETAIL as A) 19 #HASH LEFT JOIN2: [24276, 1, 11049]; key_num(1), partition_keys_num(0), ret_null(0), mix(0) KEY(A.ACTUL_USE_MOB=P3.MOB) 20 #SLCT2: [24274, 1, 7514]; A.MOB = P2.MOB 21 #NEST LOOP INNER JOIN2: [24274, 1, 7514]; [with var] 22 #SLCT2: [1, 1, 3535]; NOT(P2.MOB IS NULL) 23 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 24 #HASH RIGHT JOIN2: [12136, 1, 3979]; key_num(1), ret_null(0), KEY(P1.MOB=A.REG_MOB) 25 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 26 #PARALLEL: [12134, 1, 444]; scan_type(FULL), key_num(0, 0, 0), simple(0) 27 #SLCT2: [12134, 1, 444]; (A.TRAD_DATE >= '2024-01-01' AND NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%B%') AND NOT(var1 LIKE '%C%')... ) 28 #CSCN2: [12134, 59074854, 444]; INDEX33564250(DETAIL as A) 29 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 30 #SLCT2: [24278, 1, 11049]; A.ACTUL_USE_MOB = P3.MOB 31 #NEST LOOP INNER JOIN2: [24278, 1, 11049]; [with var] 32 #SLCT2: [1, 1, 3535]; NOT(P3.MOB IS NULL) 33 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 34 #HASH RIGHT JOIN2: [12138, 4, 7514]; key_num(1), ret_null(0), KEY(P2.MOB=A.MOB) 35 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 36 #HASH RIGHT JOIN2: [12136, 4, 3979]; key_num(1), ret_null(0), KEY(P1.MOB=A.REG_MOB) 37 #HEAP TABLE SCAN: [1, 1, 3535]; table_no(0) 38 #PARALLEL: [12134, 4, 444]; scan_type(FULL), key_num(0, 0, 0), simple(0) 39 #SLCT2: [12134, 4, 444]; (A.TRAD_DATE >= '2024-01-01' AND NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%B%') AND NOT(var1 LIKE '%C%') ... ) 40 #CSCN2: [12134, 59074854, 444]; INDEX33564250(DETAIL as A) 41 #HEAP TABLE: [7, 1, 3535]; table_no(0) full(0), mpp_full(0) autoid(1), sites(-) 42 #PRJT2: [7, 1, 3535]; exp_num(1), is_atom(FALSE) 43 #DISTINCT: [7, 1, 3535] 44 #UNION ALL: [6, 3, 3535] 45 #PRJT2: [4, 2, 3535]; exp_num(1), is_atom(FALSE) 46 #UNION ALL: [4, 2, 3535] 47 #PRJT2: [2, 1, 3535]; exp_num(1), is_atom(FALSE) 48 #DISTINCT: [2, 1, 3535] 49 #SLCT2: [1, 1, 3535]; exp11 > 6 50 #HEAP TABLE SCAN: [1, 4, 3535]; table_no(1) 51 #PRJT2: [2, 1, 3535]; exp_num(1), is_atom(FALSE) 52 #DISTINCT: [2, 1, 3535] 53 #SLCT2: [1, 1, 3535]; exp11 > 6 54 #HEAP TABLE SCAN: [1, 4, 3535]; table_no(1) 55 #PRJT2: [1, 1, 3535]; exp_num(1), is_atom(FALSE) 56 #SLCT2: [1, 1, 3535]; exp11 > 6 57 #HEAP TABLE SCAN: [1, 4, 3535]; table_no(1) 58 #HEAP TABLE: [173584, 5, 3535]; table_no(1) full(0), mpp_full(0) autoid(0), sites(-) 59 #PRJT2: [173584, 5, 3535]; exp_num(3), is_atom(FALSE) 60 #HASH2 INNER JOIN: [173584, 5, 3535]; KEY_NUM(1); KEY(ACC.STOCK_ACCOUNT=A.SEC_ACCT) KEY_NULL_EQU(0) 61 #PRJT2: [18, 1, 1]; exp_num(1), is_atom(FALSE) 62 #DISTINCT: [18, 1, 1] 63 #UNION ALL: [17, 21, 1] 64 #PRJT2: [16, 20, 1]; exp_num(1), is_atom(FALSE) 65 #UNION ALL: [16, 20, 1] 66 #PRJT2: [15, 19, 1]; exp_num(1), is_atom(FALSE) 67 #UNION ALL: [15, 19, 1] 68 #PRJT2: [14, 18, 1]; exp_num(1), is_atom(FALSE) 69 #UNION ALL: [14, 18, 1] 70 #PRJT2: [13, 17, 1]; exp_num(1), is_atom(FALSE) 71 #UNION ALL: [13, 17, 1] 72 #PRJT2: [12, 16, 1]; exp_num(1), is_atom(FALSE) 73 #UNION ALL: [12, 16, 1] 74 #PRJT2: [11, 15, 1]; exp_num(1), is_atom(FALSE) 75 #UNION ALL: [11, 15, 1] 76 #PRJT2: [11, 14, 1]; exp_num(1), is_atom(FALSE) 77 #UNION ALL: [11, 14, 1] 78 #PRJT2: [10, 13, 1]; exp_num(1), is_atom(FALSE) 79 #UNION ALL: [10, 13, 1] 80 #PRJT2: [9, 12, 1]; exp_num(1), is_atom(FALSE) 81 #UNION ALL: [9, 12, 1] 82 #PRJT2: [8, 11, 1]; exp_num(1), is_atom(FALSE) 83 #UNION ALL: [8, 11, 1] 84 #PRJT2: [7, 10, 1]; exp_num(1), is_atom(FALSE) 85 #UNION ALL: [7, 10, 1] 86 #PRJT2: [6, 9, 1]; exp_num(1), is_atom(FALSE) 87 #UNION ALL: [6, 9, 1] 88 #PRJT2: [5, 8, 1]; exp_num(1), is_atom(FALSE) 89 #UNION ALL: [5, 8, 1] 90 #PRJT2: [5, 7, 1]; exp_num(1), is_atom(FALSE) 91 #UNION ALL: [5, 7, 1] 92 #PRJT2: [4, 6, 1]; exp_num(1), is_atom(FALSE) 93 #UNION ALL: [4, 6, 1] 94 #PRJT2: [3, 5, 1]; exp_num(1), is_atom(FALSE) 95 #UNION ALL: [3, 5, 1] 96 #PRJT2: [2, 4, 1]; exp_num(1), is_atom(FALSE) 97 #UNION ALL: [2, 4, 1] 98 #PRJT2: [1, 3, 1]; exp_num(1), is_atom(FALSE) 99 #UNION ALL: [1, 3, 1] 100 #PRJT2: [1, 2, 1]; exp_num(1), is_atom(FALSE) 101 #UNION ALL: [1, 2, 1] 102 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 103 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 104 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 105 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 106 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 107 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 108 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 109 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 110 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 111 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 112 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 113 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 114 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 115 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 116 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 117 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 118 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 119 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 120 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 121 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 122 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 123 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 124 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 125 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 126 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 127 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 128 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 129 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 130 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 131 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 132 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 133 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 134 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 135 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 136 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 137 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 138 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 139 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 140 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 141 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 142 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE) 143 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL) 144 #PARALLEL: [1, 4, 3534]; scan_type(FULL), key_num(0, 0, 0), simple(0) 145 #SLCT2: [166132, 14796390, 3534]; (NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%B%') AND NOT(var1 LIKE '%C%') ... ) 146 #BLKUP2: [166132, 25841695, 3534]; IDX_20241125(A) 147 #SSEK2: [166132, 25841695, 3534]; scan_type(ASC), S0042_TRAD_DATE(DETAIL as A), scan_range['2024-01-01',max]
SQL使用with CTE写法,其中主表DETAIL有5000w以上的数据量,SQL逻辑是先通过start_date和acc的传参,带入a.trad_date和a.SEC_ACCT谓词条件进行过滤,获取with部分detail结果集,调用detail结果集获取符合条件的phone结果集,再调用phone的过滤结果MOB与主表his.detail进行关联查询获取到最终结果,逻辑中使用了两次谓词传递。见图一和图二。
图一:第一层通过a.trad_date和a.SEC_ACCT过滤
图二:第二层通过phone的MOB谓词传递对主表his.detail进行关联查询
通过执行计划分析,第一层a.SEC_ACCT谓词条件过滤性较好但字段上没有索引,虽然a.trad_date字段上存在索引但过滤性较差并且需要大量数据的回表,通过索引回表效率低;第一层的结果集传递到第二层,检索出phone的结果集也较少,通过phone的MOB条件推入,也能对主表his.detail起到很好的过滤效果,但主查询的三个关联字段上都不存在索引,因此执行计划只能进行全表扫描后过滤,无法进行高效的谓词推入,而全表需要扫描>5000w的数据量,SQL代价基本消耗在一次低效的索引回表和三次全表扫描,整体SQL耗时大于30分钟,见图三和图四。
图三:第一层的索引+回表
图四:第二层的三次全表扫描
(1)针对第一层索引效率低的问题,创建以a.SEC_ACCT字段为前导列的组合索引(SEC_ACCT,TRAD_DATE),先将SEC_ACCT通过索引进行谓词下推,创建后执行计划如下。
图五:第一层创建索引后的执行计划
(2)第二层的全表扫描,通过对主表his.detail的关联字段REG_MOB、MOB、ACTUL_USE_MOB分别创建索引,让phone的MOB结果能够下推到主表当中,以小结果集驱动大结果集形成嵌套循环连接,执行计划如下。
图六:第二层创建索引后的执行计划
具体创建索引语句如下:
--22年9月月度版已支持并行创建索引,提高索引创建效率
CREATE INDEX IDX_20241125 ON HIS.DETAIL(SEC_ACCT ,TRAD_DATE ) PARALLEL 32;
CREATE INDEX IDX_HIS_S0042_N_20241126_01 ON HIS.DETAIL(REG_MOB,TRAD_DATE) PARALLEL 32;
CREATE INDEX IDX_HIS_S0042_N_20241126_02 ON HIS.DETAIL(MOB,TRAD_DATE) PARALLEL 32;
CREATE INDEX IDX_HIS_S0042_N_20241126_03 ON HIS.DETAIL(ACTUL_USE_MOB,TRAD_DATE) PARALLEL 32;
优化后逻辑读13890,耗时384ms,整体执行计划如下:
1 #NSET2: [50, 5->20, 11049]
2 #PIPE2: [50, 5->20, 11049]
3 #PIPE2: [31, 5->20, 11049]
4 #PRJT2: [24, 5->20, 11049]; exp_num(5), is_atom(FALSE)
5 #DISTINCT: [24, 5->20, 11049], MEM_USED(7KB), DISK_USED(0KB)
6 #PRJT2: [23, 7->1135, 11049]; exp_num(5), is_atom(FALSE)
7 #UNION FOR OR2: [23, 7->1135, 11049]; key_num(4)
8 #UNION FOR OR2: [13, 6->1080, 11049]; key_num(4)
9 #HASH RIGHT JOIN2: [4, 5->1080, 11049]; key_num(1); col_num(10); MEM_USED(16046KB), DISK_USED(0KB) KEY(P3.MOB=A.ACTUL_USE_MOB)
10 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
11 #HASH RIGHT JOIN2: [3, 5->1080, 7514]; key_num(1); col_num(9); MEM_USED(16046KB), DISK_USED(0KB) KEY(P2.MOB=A.MOB)
12 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
13 #NEST LOOP INDEX JOIN2: [1, 5->1080, 3979]
14 #SLCT2: [1, 1->12, 3535]; NOT(P1.MOB IS NULL)
15 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
16 #PARALLEL: [1, 5->1080, 444]; scan_type(FULL)
17 #SLCT2: [1, 5->1080, 444]; (A.TRAD_DATE >= '2024-01-01' AND NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%F%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%D%') AND NOT(var1 LIKE '%C%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%B%') AND NOT(var2 LIKE '%A%') AND NOT(var2 LIKE '%F%') AND NOT(var2 LIKE '%E%') AND ... )
18 #BLKUP2: [1, 5->1344, 96]; IDX_HIS_S0042_N_20241126_01(DETAIL)
19 #SSEK2: [1, 5->1344, 96]; scan_type(ASC), IDX_HIS_S0042_N_20241126_01(DETAIL), scan_range[(P1.MOB,min),(P1.MOB,max))
20 #HASH LEFT JOIN2: [7, 1->1080, 11049]; key_num(1); col_num(10); partition_keys_num(0); mix(0); MEM_USED(12718KB), DISK_USED(0KB) KEY(A.ACTUL_USE_MOB=P3.MOB)
21 #SLCT2: [5, 1->1080, 7514]; A.MOB = P2.MOB
22 #NEST LOOP INNER JOIN2: [5, 1->1080, 7514]; [with var]
23 #SLCT2: [1, 1->12, 3535]; NOT(P2.MOB IS NULL)
24 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
25 #HASH RIGHT JOIN2: [1, 1->1080, 3979]; key_num(1); col_num(8); MEM_USED(192552KB), DISK_USED(0KB) KEY(P1.MOB=A.REG_MOB)
26 #HEAP TABLE SCAN: [1, 1->144, 3535]; table_no(0),
27 #PARALLEL: [1, 1->1080, 444]; scan_type(FULL)
28 #SLCT2: [1, 1->1080, 444]; (NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%F%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%D%') AND NOT(var1 LIKE '%C%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%B%') AND NOT(var2 LIKE '%A%') AND NOT(var2 LIKE '%F%') AND NOT(var2 LIKE '%E%') AND NOT(var2 LIKE '%D%') AND ... )
29 #BLKUP2: [1, 3->1083, 444]; IDX_HIS_S0042_N_20241126_02(DETAIL)
30 #SSEK2: [1, 3->1083, 444]; scan_type(ASC), IDX_HIS_S0042_N_20241126_02(DETAIL), scan_range[(var71,'2024-01-01'),(var71,max))
31 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
32 #SLCT2: [9, 1->181, 11049]; A.ACTUL_USE_MOB = P3.MOB
33 #NEST LOOP INNER JOIN2: [9, 1->181, 11049]; [with var]
34 #SLCT2: [1, 1->12, 3535]; NOT(P3.MOB IS NULL)
35 #HEAP TABLE SCAN: [1, 1->12, 3535]; table_no(0),
36 #HASH RIGHT JOIN2: [3, 4->181, 7514]; key_num(1); col_num(9); MEM_USED(192552KB), DISK_USED(0KB) KEY(P2.MOB=A.MOB)
37 #HEAP TABLE SCAN: [1, 1->144, 3535]; table_no(0),
38 #HASH RIGHT JOIN2: [1, 4->181, 3979]; key_num(1); col_num(8); MEM_USED(192552KB), DISK_USED(0KB) KEY(P1.MOB=A.REG_MOB)
39 #HEAP TABLE SCAN: [1, 1->144, 3535]; table_no(0),
40 #PARALLEL: [1, 4->181, 444]; scan_type(FULL)
41 #SLCT2: [1, 4->181, 444]; (NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%F%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%D%') AND NOT(var1 LIKE '%C%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%B%') AND NOT(var2 LIKE '%A%') AND NOT(var2 LIKE '%F%') AND NOT(var2 LIKE '%E%') AND NOT(var2 LIKE '%D%') AND ... )
42 #BLKUP2: [1, 8->183, 444]; IDX_HIS_S0042_N_20241126_03(DETAIL)
43 #SSEK2: [1, 8->183, 444]; scan_type(ASC), IDX_HIS_S0042_N_20241126_03(DETAIL), scan_range[(var72,'2024-01-01'),(var72,max))
44 #HEAP TABLE: [7, 1, 3535]; table_no(0) full(FALSE), mpp_full(0) autoid(TRUE) sites(-)
45 #PRJT2: [7, 1->12, 3535]; exp_num(1), is_atom(FALSE)
46 #DISTINCT: [7, 1->12, 3535], MEM_USED(7KB), DISK_USED(0KB)
47 #UNION ALL: [6, 3->727, 3535]
48 #PRJT2: [4, 2->15, 3535]; exp_num(1), is_atom(FALSE)
49 #UNION ALL: [4, 2->15, 3535]
50 #PRJT2: [2, 1->12, 3535]; exp_num(1), is_atom(FALSE)
51 #DISTINCT: [2, 1->12, 3535], MEM_USED(7KB), DISK_USED(0KB)
52 #SLCT2: [1, 1->712, 3535]; exp11 > 6
53 #HEAP TABLE SCAN: [1, 4->1507, 3535]; table_no(1),
54 #PRJT2: [2, 1->3, 3535]; exp_num(1), is_atom(FALSE)
55 #DISTINCT: [2, 1->3, 3535], MEM_USED(6KB), DISK_USED(0KB)
56 #SLCT2: [1, 1->107, 3535]; exp11 > 6
57 #HEAP TABLE SCAN: [1, 4->1507, 3535]; table_no(1),
58 #PRJT2: [1, 1->712, 3535]; exp_num(1), is_atom(FALSE)
59 #SLCT2: [1, 1->712, 3535]; exp11 > 6
60 #HEAP TABLE SCAN: [1, 4->1507, 3535]; table_no(1),
61 #HEAP TABLE: [18, 4, 3535]; table_no(1) full(FALSE), mpp_full(0) autoid(FALSE) sites(-)
62 #PRJT2: [18, 4->1507, 3535]; exp_num(3), is_atom(FALSE)
63 #NEST LOOP INDEX JOIN2: [18, 4->1507, 3535]
64 #PRJT2: [18, 1->21, 1]; exp_num(1), is_atom(FALSE)
65 #DISTINCT: [18, 1->21, 1], MEM_USED(7KB), DISK_USED(0KB)
66 #UNION ALL: [17, 21->21, 1]
67 #PRJT2: [16, 20->20, 1]; exp_num(1), is_atom(FALSE)
68 #UNION ALL: [16, 20->20, 1]
69 #PRJT2: [15, 19->19, 1]; exp_num(1), is_atom(FALSE)
70 #UNION ALL: [15, 19->19, 1]
71 #PRJT2: [14, 18->18, 1]; exp_num(1), is_atom(FALSE)
72 #UNION ALL: [14, 18->18, 1]
73 #PRJT2: [13, 17->17, 1]; exp_num(1), is_atom(FALSE)
74 #UNION ALL: [13, 17->17, 1]
75 #PRJT2: [12, 16->16, 1]; exp_num(1), is_atom(FALSE)
76 #UNION ALL: [12, 16->16, 1]
77 #PRJT2: [11, 15->15, 1]; exp_num(1), is_atom(FALSE)
78 #UNION ALL: [11, 15->15, 1]
79 #PRJT2: [11, 14->14, 1]; exp_num(1), is_atom(FALSE)
80 #UNION ALL: [11, 14->14, 1]
81 #PRJT2: [10, 13->13, 1]; exp_num(1), is_atom(FALSE)
82 #UNION ALL: [10, 13->13, 1]
83 #PRJT2: [9, 12->12, 1]; exp_num(1), is_atom(FALSE)
84 #UNION ALL: [9, 12->12, 1]
85 #PRJT2: [8, 11->11, 1]; exp_num(1), is_atom(FALSE)
86 #UNION ALL: [8, 11->11, 1]
87 #PRJT2: [7, 10->10, 1]; exp_num(1), is_atom(FALSE)
88 #UNION ALL: [7, 10->10, 1]
89 #PRJT2: [6, 9->9, 1]; exp_num(1), is_atom(FALSE)
90 #UNION ALL: [6, 9->9, 1]
91 #PRJT2: [5, 8->8, 1]; exp_num(1), is_atom(FALSE)
92 #UNION ALL: [5, 8->8, 1]
93 #PRJT2: [5, 7->7, 1]; exp_num(1), is_atom(FALSE)
94 #UNION ALL: [5, 7->7, 1]
95 #PRJT2: [4, 6->6, 1]; exp_num(1), is_atom(FALSE)
96 #UNION ALL: [4, 6->6, 1]
97 #PRJT2: [3, 5->5, 1]; exp_num(1), is_atom(FALSE)
98 #UNION ALL: [3, 5->5, 1]
99 #PRJT2: [2, 4->4, 1]; exp_num(1), is_atom(FALSE)
100 #UNION ALL: [2, 4->4, 1]
101 #PRJT2: [1, 3->3, 1]; exp_num(1), is_atom(FALSE)
102 #UNION ALL: [1, 3->3, 1]
103 #PRJT2: [1, 2->2, 1]; exp_num(1), is_atom(FALSE)
104 #UNION ALL: [1, 2->2, 1]
105 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
106 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
107 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
108 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
109 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
110 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
111 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
112 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
113 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
114 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
115 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
116 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
117 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
118 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
119 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
120 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
121 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
122 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
123 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
124 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
125 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
126 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
127 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
128 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
129 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
130 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
131 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
132 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
133 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
134 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
135 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
136 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
137 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
138 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
139 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
140 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
141 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
142 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
143 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
144 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
145 #PRJT2: [1, 1->1, 1]; exp_num(1), is_atom(FALSE)
146 #CSCN2: [1, 1->1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2)
147 #PARALLEL: [1, 4->1507, 3534]; scan_type(FULL)
148 #SLCT2: [1, 4->1507, 3534]; (A.TRAD_DATE >= '2024-01-01' AND NOT(var1 LIKE '%A%') AND NOT(var1 LIKE '%F%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%D%') AND NOT(var1 LIKE '%C%') AND NOT(var1 LIKE '%E%') AND NOT(var1 LIKE '%B%') AND NOT(var2 LIKE '%A%') AND NOT(var2 LIKE '%F%') AND NOT(var2 LIKE '%E%') AND ... )
149 #BLKUP2: [1, 4->1625, 96]; IDX_20241125(DETAIL)
150 #SSEK2: [1, 4->1625, 96]; scan_type(ASC), IDX_20241125(DETAIL), scan_range[(ACC.STOCK_ACCOUNT,min),(ACC.STOCK_ACCOUNT,max))
Statistics
-----------------------------------------------------------------
0 data pages changed
0 undo pages changed
13890 logical reads
830 physical reads
0 redo size
1920 bytes sent to client
4621 bytes received from client
1 roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
20 rows processed
114 io wait time(ms)
384 exec time(ms)
已用时间: 383.414(毫秒). 执行号:816338502.
文章
阅读量
获赞