查询语句大量阻塞,event为latch:buffer cache chain(该语句属于热链)。
查询结果跑不出来。
explain plan for
SELECT K.IDX_CODE, NVL(AA.COUNT, 0) VALUE
FROM K_AMR_CONFIG K
LEFT JOIN (SELECT F.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT F.TG_ID) COUNT,
(SELECT C.IDX_CODE
FROM K_AMR_CONFIG C
WHERE C.TAG_NO = F.TAG_NO
AND C.TAG_TYPE = '02') IDX_CODE
FROM K_AMR_EXCEP_FLOW F,
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND B.BUSS_NO = A.STAFF_NO
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
WHERE F1.TG_ID = F.TG_ID
AND F1.ORG_NO = F.GDS_NO
AND F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO IN
('TagPBGZ', 'TagPBZZ', 'TagPBYZBPH', 'TagPBDDY')
AND SUBSTR(REPLACE(FIRST_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
AND F1.AUTH_USER_NO = :B1
GROUP BY F1.AUTH_USER_NO, F.GDS_NO, F.TAG_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.TG_ID) COUNT,
'PD0009' IDX_CODE
FROM (SELECT F.GDS_NO, F.TG_ID
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagPBGZTD'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND B.BUSS_NO = A.STAFF_NO
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
AND F1.AUTH_USER_NO = :B1
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.DEVICE_NAME) COUNT,
'PD0012' IDX_CODE
FROM (SELECT F.GDS_NO,
F.TG_ID,
DEVICE_NAME,
COUNT(DISTINCT F.MSG_ID) CNT
FROM K_AMR_LBTZ_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagLBTZ'
AND SUBSTR(REPLACE(FIRST_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID, DEVICE_NAME
HAVING COUNT(DISTINCT F.MSG_ID) >= 3) FF,
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND B.BUSS_NO = A.STAFF_NO
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
AND F1.AUTH_USER_NO = :B1
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
UNION ALL
SELECT F.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT F.MSG_ID) COUNT,
'PD0013' IDX_CODE
FROM K_AMR_GBTD_FLOW F,
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND B.BUSS_NO = A.STAFF_NO
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
WHERE F1.TG_ID = F.TG_ID
AND F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagZBBS'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
AND F1.AUTH_USER_NO = :B1
GROUP BY F1.AUTH_USER_NO, F.GDS_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.DEVICE_NAME) COUNT,
'PD0014' IDX_CODE
FROM (SELECT F.GDS_NO,
F.TG_ID,
DEVICE_NAME,
COUNT(DISTINCT F.MSG_ID) CNT
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagZBBS'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID, DEVICE_NAME
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND B.BUSS_NO = A.STAFF_NO
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
AND F1.AUTH_USER_NO = :B1
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO) AA
ON AA.IDX_CODE = K.IDX_CODE
WHERE K.IDX_CODE IN ('PD0002',
'PD0004',
'PD0006',
'PD0008',
'PD0009',
'PD0012',
'PD0013',
'PD0014');
Plan hash value: 852542323
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 8 | 256 | 84261 (1)| 00:16:52 |
|* 1 | HASH JOIN OUTER | | 8 | 256 | 84261 (1)| 00:16:52 |
| 2 | INLIST ITERATOR | | | | | |
|* 3 | INDEX RANGE SCAN | K_AMR_CONFIG_IDX_CODE | 8 | 56 | 1 (0)| 00:00:01 |
|* 4 | VIEW | | 5 | 125 | 84260 (1)| 00:16:52 |
| 5 | UNION-ALL | | | | | |
|* 6 | TABLE ACCESS BY INDEX ROWID | K_AMR_CONFIG | 1 | 19 | 1 (0)| 00:00:01 |
|* 7 | INDEX RANGE SCAN | K_AMR_CONFIG_TAG_NO | 2 | | 1 (0)| 00:00:01 |
| 8 | SORT GROUP BY | | 1 | 132 | 4012 (1)| 00:00:49 |
| 9 | NESTED LOOPS | | 1 | 132 | 4011 (1)| 00:00:49 |
| 10 | NESTED LOOPS | | 9 | 132 | 4011 (1)| 00:00:49 |
|* 11 | HASH JOIN | | 1 | 121 | 4010 (1)| 00:00:49 |
| 12 | INLIST ITERATOR | | | | | |
|* 13 | TABLE ACCESS BY INDEX ROWID | K_AMR_EXCEP_FLOW | 28 | 1120 | 144 (0)| 00:00:02 |
|* 14 | INDEX RANGE SCAN | IDX_TAG_NO | 9897 | | 7 (0)| 00:00:01 |
|* 15 | TABLE ACCESS BY INDEX ROWID | K_IC_DIM_VALUE | 1 | 37 | 1 (0)| 00:00:01 |
|* 16 | INDEX RANGE SCAN | IDX_K_IC_DIM_VALUE_N2 | 1 | | 1 (0)| 00:00:01 |
| 17 | MERGE JOIN CARTESIAN | | 60220 | 4763K| 3866 (1)| 00:00:47 |
| 18 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
| 19 | NESTED LOOPS | | 2 | 41 | 2 (0)| 00:00:01 |
|* 20 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|* 21 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|* 22 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|* 23 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
| 24 | BUFFER SORT | | 262K| 10M| 3865 (1)| 00:00:47 |
|* 25 | VIEW | | 262K| 10M| 3864 (1)| 00:00:47 |
|* 26 | FILTER | | | | | |
|* 27 | TABLE ACCESS FULL | G_TG | 262K| 6146K| 3864 (1)| 00:00:47 |
|* 28 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|* 29 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
| 30 | HASH GROUP BY | | 1 | 31 | 62111 (1)| 00:12:26 |
| 31 | VIEW | VM_NWVW_2 | 1 | 31 | 62110 (1)| 00:12:26 |
| 32 | HASH GROUP BY | | 1 | 97 | 62110 (1)| 00:12:26 |
| 33 | NESTED LOOPS | | 1 | 97 | 62109 (1)| 00:12:26 |
| 34 | NESTED LOOPS | | 9 | 97 | 62109 (1)| 00:12:26 |
|* 35 | HASH JOIN | | 1 | 86 | 62108 (1)| 00:12:26 |
| 36 | VIEW | | 47 | 235 | 58243 (1)| 00:11:39 |
|* 37 | FILTER | | | | | |
| 38 | HASH GROUP BY | | 47 | 6345 | 58243 (1)| 00:11:39 |
| 39 | VIEW | VM_NWVW_1 | 929 | 122K| 58243 (1)| 00:11:39 |
| 40 | HASH GROUP BY | | 929 | 67817 | 58243 (1)| 00:11:39 |
|* 41 | TABLE ACCESS BY INDEX ROWID| K_AMR_GBTD_FLOW | 929 | 67817 | 58242 (1)| 00:11:39 |
|* 42 | INDEX RANGE SCAN | IDX_TAG_NO1 | 5278K| | 3107 (1)| 00:00:38 |
|* 43 | TABLE ACCESS BY INDEX ROWID | K_IC_DIM_VALUE | 1 | 37 | 1 (0)| 00:00:01 |
|* 44 | INDEX RANGE SCAN | IDX_K_IC_DIM_VALUE_N2 | 1 | | 1 (0)| 00:00:01 |
| 45 | MERGE JOIN CARTESIAN | | 60220 | 4763K| 3865 (1)| 00:00:47 |
| 46 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
| 47 | NESTED LOOPS | | 2 | 41 | 2 (0)| 00:00:01 |
|* 48 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|* 49 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|* 50 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|* 51 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
| 52 | BUFFER SORT | | 262K| 10M| 3864 (1)| 00:00:47 |
|* 53 | VIEW | | 262K| 10M| 3863 (1)| 00:00:47 |
|* 54 | FILTER | | | | | |
|* 55 | TABLE ACCESS FULL | G_TG | 262K| 6146K| 3863 (1)| 00:00:47 |
|* 56 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|* 57 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
| 58 | HASH GROUP BY | | 1 | 150 | 11901 (1)| 00:02:23 |
| 59 | VIEW | VM_NWVW_4 | 1 | 150 | 11900 (1)| 00:02:23 |
| 60 | HASH GROUP BY | | 1 | 139 | 11900 (1)| 00:02:23 |
| 61 | NESTED LOOPS | | 1 | 139 | 11899 (1)| 00:02:23 |
| 62 | NESTED LOOPS | | 9 | 139 | 11899 (1)| 00:02:23 |
|* 63 | HASH JOIN | | 1 | 128 | 11898 (1)| 00:02:23 |
| 64 | VIEW | | 267 | 12549 | 8033 (1)| 00:01:37 |
|* 65 | FILTER | | | | | |
| 66 | HASH GROUP BY | | 267 | 47259 | 8033 (1)| 00:01:37 |
| 67 | VIEW | VM_NWVW_3 | 5333 | 921K| 8033 (1)| 00:01:37 |
| 68 | HASH GROUP BY | | 5333 | 572K| 8033 (1)| 00:01:37 |
|* 69 | TABLE ACCESS FULL | K_AMR_LBTZ_FLOW | 5333 | 572K| 8032 (1)| 00:01:37 |
|* 70 | TABLE ACCESS BY INDEX ROWID | K_IC_DIM_VALUE | 1 | 37 | 1 (0)| 00:00:01 |
|* 71 | INDEX RANGE SCAN | IDX_K_IC_DIM_VALUE_N2 | 1 | | 1 (0)| 00:00:01 |
| 72 | MERGE JOIN CARTESIAN | | 60220 | 4763K| 3865 (1)| 00:00:47 |
| 73 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
| 74 | NESTED LOOPS | | 2 | 41 | 2 (0)| 00:00:01 |
|* 75 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|* 76 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|* 77 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|* 78 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
| 79 | BUFFER SORT | | 262K| 10M| 3864 (1)| 00:00:47 |
|* 80 | VIEW | | 262K| 10M| 3863 (1)| 00:00:47 |
|* 81 | FILTER | | | | | |
|* 82 | TABLE ACCESS FULL | G_TG | 262K| 6146K| 3863 (1)| 00:00:47 |
|* 83 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|* 84 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
| 85 | HASH GROUP BY | | 1 | 143 | 1187 (1)| 00:00:15 |
| 86 | VIEW | VM_NWVW_5 | 1 | 143 | 1186 (1)| 00:00:15 |
| 87 | HASH GROUP BY | | 1 | 149 | 1186 (1)| 00:00:15 |
|* 88 | FILTER | | | | | |
|* 89 | FILTER | | | | | |
|* 90 | HASH JOIN | | 1 | 149 | 1184 (1)| 00:00:15 |
| 91 | NESTED LOOPS | | 1 | 76 | 4 (0)| 00:00:01 |
| 92 | NESTED LOOPS | | 1 | 76 | 4 (0)| 00:00:01 |
| 93 | NESTED LOOPS | | 1 | 52 | 3 (0)| 00:00:01 |
| 94 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
|* 95 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|* 96 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|* 97 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
|* 98 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|* 99 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
|*100 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|*101 | INDEX RANGE SCAN | IDX_G_TG_TG_ID | 1 | | 1 (0)| 00:00:01 |
|*102 | TABLE ACCESS BY INDEX ROWID | G_TG | 1 | 24 | 1 (0)| 00:00:01 |
|*103 | TABLE ACCESS BY INDEX ROWID | K_AMR_GBTD_FLOW | 19 | 1387 | 1180 (1)| 00:00:15 |
|*104 | INDEX RANGE SCAN | IDX_TAG_NO1 | 106K| | 63 (0)| 00:00:01 |
|*105 | TABLE ACCESS BY INDEX ROWID | K_IC_DIM_VALUE | 1 | 37 | 1 (0)| 00:00:01 |
|*106 | INDEX RANGE SCAN | IDX_K_IC_DIM_VALUE_N2 | 1 | | 1 (0)| 00:00:01 |
| 107 | HASH GROUP BY | | 1 | 143 | 5049 (1)| 00:01:01 |
| 108 | VIEW | VM_NWVW_7 | 1 | 143 | 5048 (1)| 00:01:01 |
| 109 | HASH GROUP BY | | 1 | 131 | 5048 (1)| 00:01:01 |
| 110 | NESTED LOOPS | | 1 | 131 | 5047 (1)| 00:01:01 |
| 111 | NESTED LOOPS | | 9 | 131 | 5047 (1)| 00:01:01 |
|*112 | HASH JOIN | | 1 | 120 | 5046 (1)| 00:01:01 |
| 113 | VIEW | | 1 | 39 | 1181 (1)| 00:00:15 |
|*114 | FILTER | | | | | |
| 115 | HASH GROUP BY | | 1 | 169 | 1181 (1)| 00:00:15 |
| 116 | VIEW | VM_NWVW_6 | 19 | 3211 | 1181 (1)| 00:00:15 |
| 117 | HASH GROUP BY | | 19 | 2033 | 1181 (1)| 00:00:15 |
|*118 | TABLE ACCESS BY INDEX ROWID| K_AMR_GBTD_FLOW | 19 | 2033 | 1180 (1)| 00:00:15 |
|*119 | INDEX RANGE SCAN | IDX_TAG_NO1 | 106K| | 63 (0)| 00:00:01 |
|*120 | TABLE ACCESS BY INDEX ROWID | K_IC_DIM_VALUE | 1 | 37 | 1 (0)| 00:00:01 |
|*121 | INDEX RANGE SCAN | IDX_K_IC_DIM_VALUE_N2 | 1 | | 1 (0)| 00:00:01 |
| 122 | MERGE JOIN CARTESIAN | | 60220 | 4763K| 3865 (1)| 00:00:47 |
| 123 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
| 124 | NESTED LOOPS | | 2 | 41 | 2 (0)| 00:00:01 |
|*125 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|*126 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|*127 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|*128 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
| 129 | BUFFER SORT | | 262K| 10M| 3864 (1)| 00:00:47 |
|*130 | VIEW | | 262K| 10M| 3863 (1)| 00:00:47 |
|*131 | FILTER | | | | | |
|*132 | TABLE ACCESS FULL | G_TG | 262K| 6146K| 3863 (1)| 00:00:47 |
|*133 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|*134 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("AA"."IDX_CODE"(+)="K"."IDX_CODE")
3 - access("K"."IDX_CODE"='PD0002' OR "K"."IDX_CODE"='PD0004' OR "K"."IDX_CODE"='PD0006' OR
"K"."IDX_CODE"='PD0008' OR "K"."IDX_CODE"='PD0009' OR "K"."IDX_CODE"='PD0012' OR "K"."IDX_CODE"='PD0013'
OR "K"."IDX_CODE"='PD0014')
4 - filter("AA"."IDX_CODE"(+)='PD0002' OR "AA"."IDX_CODE"(+)='PD0004' OR "AA"."IDX_CODE"(+)='PD0006' OR
"AA"."IDX_CODE"(+)='PD0008' OR "AA"."IDX_CODE"(+)='PD0009' OR "AA"."IDX_CODE"(+)='PD0012' OR
"AA"."IDX_CODE"(+)='PD0013' OR "AA"."IDX_CODE"(+)='PD0014')
6 - filter("C"."TAG_TYPE"='02')
7 - access("C"."TAG_NO"=:B1)
11 - access("TG_ID"=TO_NUMBER("F"."TG_ID") AND "ORG_NO"="F"."GDS_NO")
13 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("FIRST_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
14 - access("F"."TAG_NO"='TagPBDDY' OR "F"."TAG_NO"='TagPBGZ' OR "F"."TAG_NO"='TagPBYZBPH' OR
"F"."TAG_NO"='TagPBZZ')
15 - filter("DIM_CODE"='dept')
16 - access("DIM_VALUE"=:B1)
20 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
21 - access("A"."AUTH_USER_NO"=:B1)
filter("A"."AUTH_USER_NO"<>'无' AND "A"."AUTH_USER_NO" IS NOT NULL)
22 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
23 - filter("B"."DATA_OPER_TYPE"<>'D')
25 - filter("ORG_NO" IS NOT NULL)
26 - filter('无'<>:B1)
27 - filter("A"."PUB_PRIV_FLAG"='01' AND "RUN_STATUS_CODE"='01')
28 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
29 - filter("R"."DATA_OPER_TYPE"<>'D' AND "R"."TG_ID"="TG_ID")
35 - access("TG_ID"=TO_NUMBER("FF"."TG_ID") AND "ORG_NO"="FF"."GDS_NO")
37 - filter(COUNT("$vm_col_1")>=2)
41 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
42 - access("F"."TAG_NO"='TagPBGZTD')
43 - filter("DIM_CODE"='dept')
44 - access("DIM_VALUE"=:B1)
48 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
49 - access("A"."AUTH_USER_NO"=:B1)
filter("A"."AUTH_USER_NO"<>'无' AND "A"."AUTH_USER_NO" IS NOT NULL)
50 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
51 - filter("B"."DATA_OPER_TYPE"<>'D')
53 - filter("ORG_NO" IS NOT NULL)
54 - filter('无'<>:B1)
55 - filter("A"."PUB_PRIV_FLAG"='01' AND "RUN_STATUS_CODE"='01')
56 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
57 - filter("R"."DATA_OPER_TYPE"<>'D' AND "R"."TG_ID"="TG_ID")
63 - access("TG_ID"=TO_NUMBER("FF"."TG_ID") AND "ORG_NO"="FF"."GDS_NO")
65 - filter(COUNT("$vm_col_1")>=3)
69 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("FIRST_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm') AND "F"."TAG_NO"='TagLBTZ')
70 - filter("DIM_CODE"='dept')
71 - access("DIM_VALUE"=:B1)
75 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
76 - access("A"."AUTH_USER_NO"=:B1)
filter("A"."AUTH_USER_NO"<>'无' AND "A"."AUTH_USER_NO" IS NOT NULL)
77 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
78 - filter("B"."DATA_OPER_TYPE"<>'D')
80 - filter("ORG_NO" IS NOT NULL)
81 - filter('无'<>:B1)
82 - filter("A"."PUB_PRIV_FLAG"='01' AND "RUN_STATUS_CODE"='01')
83 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
84 - filter("R"."DATA_OPER_TYPE"<>'D' AND "R"."TG_ID"="TG_ID")
88 - filter( (SELECT "P_DIM_ID" FROM CPSS."K_IC_DIM_VALUE" "K_IC_DIM_VALUE" WHERE "DIM_VALUE"=:B1 AND
"DIM_CODE"='dept') IS NOT NULL)
89 - filter('无'<>:B1)
90 - access("TG_ID"=TO_NUMBER("F"."TG_ID"))
95 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
96 - access("A"."AUTH_USER_NO"=:B1)
filter("A"."AUTH_USER_NO"<>'无' AND "A"."AUTH_USER_NO" IS NOT NULL)
97 - filter("B"."DATA_OPER_TYPE"<>'D')
98 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
99 - filter("R"."DATA_OPER_TYPE"<>'D')
100 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
101 - access("R"."TG_ID"="TG_ID")
102 - filter("A"."PUB_PRIV_FLAG"='01' AND "RUN_STATUS_CODE"='01')
103 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
104 - access("F"."TAG_NO"='TagZBBS')
105 - filter("DIM_CODE"='dept')
106 - access("DIM_VALUE"=:B1)
112 - access("TG_ID"=TO_NUMBER("FF"."TG_ID") AND "ORG_NO"="FF"."GDS_NO")
114 - filter(COUNT("$vm_col_1")>=2)
118 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
119 - access("F"."TAG_NO"='TagZBBS')
120 - filter("DIM_CODE"='dept')
121 - access("DIM_VALUE"=:B1)
125 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
126 - access("A"."AUTH_USER_NO"=:B1)
filter("A"."AUTH_USER_NO"<>'无' AND "A"."AUTH_USER_NO" IS NOT NULL)
127 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
128 - filter("B"."DATA_OPER_TYPE"<>'D')
130 - filter("ORG_NO" IS NOT NULL)
131 - filter('无'<>:B1)
132 - filter("A"."PUB_PRIV_FLAG"='01' AND "RUN_STATUS_CODE"='01')
133 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
134 - filter("R"."DATA_OPER_TYPE"<>'D' AND "R"."TG_ID"="TG_ID")
仔细阅读sql我们发现该sql有一个重复出现的查询体
(SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM K_ID_G_TG T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND B.BUSS_NO = A.STAFF_NO
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无') F1
共出现了5次。
对于这类重复出现的查询体,我们通常用with进行改写
从执行计划看到访问G_TG表,才发现K_ID_G_TG表对应的是一个视图。
create or replace view k_id_g_tg as
select "TG_ID","ORG_NO","TG_NO","TG_NAME","TG_CAP","INST_ADDR","CHG_DATE","PUB_PRIV_FLAG","RUN_STATUS_CODE","REMARKS","AREA_TYPE","PF","IS_EXCE_TG","RATE_TIME","DWDM","DATA_TIME"
from (select tg_id,
(select p_dim_id
from k_ic_dim_value
where dim_value = a.org_no
and dim_code = 'dept') org_no,
tg_no,
tg_name,
tg_cap,
inst_addr,
chg_date,
pub_priv_flag,
run_status_code,
remark remarks,
area_type,
pf,
(select is_exce_tg from k_id_g_tg_jp where tg_id=a.tg_id and rownum=1) is_exce_tg、,
(select rate_time from k_id_g_tg_jp where tg_id=a.tg_id and rownum=1) rate_time,
org_no dwdm,
sysdate data_time
from g_tg a
where a.pub_priv_flag = '01'
and run_status_code = '01')
where org_no is not null;
查看视图,视图中出现的org_no、is_exce_tg、rate_time字段,我们根本用不上,查询基表足矣。
所以with可以改写如下:
with F1 as
(
SELECT T.ORG_NO, T.TG_ID, A.AUTH_USER_NO
FROM g_tg T,
K_ID_GR_TG_RELA R,
K_ID_GRID_BUSS B,
K_ID_STAFF A
WHERE R.DATA_OPER_TYPE != 'D'
AND R.TG_ID = T.TG_ID
AND B.GR_ID = R.GR_ID
AND B.DATA_OPER_TYPE != 'D'
AND A.DATA_OPER_TYPE != 'D'
AND A.STAFF_NO <> '无'
AND A.STAFF_NO IS NOT NULL
AND B.BUSS_NO = A.STAFF_NO
AND A.AUTH_USER_NO IS NOT NULL
AND A.AUTH_USER_NO != '无'
AND A.AUTH_USER_NO = 'P6xxxxxxx1'
AND T.pub_priv_flag = '01'
and T.run_status_code = '01'
)
SELECT K.IDX_CODE, NVL(AA.COUNT, 0) VALUE
FROM K_AMR_CONFIG K
LEFT JOIN (
SELECT F.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT F.TG_ID) COUNT,
(SELECT C.IDX_CODE
FROM K_AMR_CONFIG C
WHERE C.TAG_NO = F.TAG_NO
AND C.TAG_TYPE = '02') IDX_CODE
FROM K_AMR_EXCEP_FLOW F,
F1
WHERE F1.TG_ID = F.TG_ID
AND F1.ORG_NO = F.GDS_NO
AND F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO IN
('TagPBGZ', 'TagPBZZ', 'TagPBYZBPH', 'TagPBDDY')
AND SUBSTR(REPLACE(FIRST_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F1.AUTH_USER_NO, F.GDS_NO, F.TAG_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.TG_ID) COUNT,
'PD0009' IDX_CODE
FROM (SELECT F.GDS_NO, F.TG_ID
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagPBGZTD'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.DEVICE_NAME) COUNT,
'PD0012' IDX_CODE
FROM (SELECT F.GDS_NO,
F.TG_ID,
DEVICE_NAME,
COUNT(DISTINCT F.MSG_ID) CNT
FROM K_AMR_LBTZ_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagLBTZ'
AND SUBSTR(REPLACE(FIRST_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID, DEVICE_NAME
HAVING COUNT(DISTINCT F.MSG_ID) >= 3) FF,
F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
UNION ALL
SELECT F.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT F.MSG_ID) COUNT,
'PD0013' IDX_CODE
FROM K_AMR_GBTD_FLOW F,
F1
WHERE F1.TG_ID = F.TG_ID
AND F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagZBBS'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F1.AUTH_USER_NO, F.GDS_NO
UNION ALL
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.DEVICE_NAME) COUNT,
'PD0014' IDX_CODE
FROM (SELECT F.GDS_NO,
F.TG_ID,
DEVICE_NAME,
COUNT(DISTINCT F.MSG_ID) CNT
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagZBBS'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID, DEVICE_NAME
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
) AA
ON AA.IDX_CODE = K.IDX_CODE
WHERE K.IDX_CODE IN ('PD0002',
'PD0004',
'PD0006',
'PD0008',
'PD0009',
'PD0012',
'PD0013',
'PD0014');
再次执行查询,还是查不动。
我们分别对union all上下关联的sql进行分析
SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.TG_ID) COUNT,
'PD0009' IDX_CODE
FROM (SELECT F.GDS_NO, F.TG_ID
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagPBGZTD'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
该步骤执行慢。
从执行计划中看出,走的是TAG_NO的索引。
通过dba_tab_col_statistics发现TAG_NO distinct值为2。
全表数据量约为500w。
分析其他过滤条件MAKE_TIME列,数据比较倾斜,201910月数据为200w,其他月份数据量偏少,最高只有10w左右。
所以删除了原先TAG_NO列索引 drop index cpss.IDX_TAG_NO1;
创建函数索引
create index cpss.idx_MAKE_TIME on cpss.K_AMR_GBTD_FLOW(substr(replace(MAKE_TIME, '-', ''), 1, 6),TAG_NO);
执行计划如下:
Plan hash value: 668798141
------------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 8 | 256 | 9039 (1)| 00:01:49 |
| 1 | TEMP TABLE TRANSFORMATION | | | | | |
| 2 | LOAD AS SELECT | SYS_TEMP_0FD9FD2FB_8ABCBB03 | | | | |
| 3 | NESTED LOOPS | | 1 | 76 | 4 (0)| 00:00:01 |
| 4 | NESTED LOOPS | | 1 | 76 | 4 (0)| 00:00:01 |
| 5 | NESTED LOOPS | | 1 | 52 | 3 (0)| 00:00:01 |
| 6 | NESTED LOOPS | | 1 | 41 | 2 (0)| 00:00:01 |
|* 7 | TABLE ACCESS BY INDEX ROWID | K_ID_STAFF | 1 | 21 | 1 (0)| 00:00:01 |
|* 8 | INDEX RANGE SCAN | IDX_K_ID_STAFF_N4 | 1 | | 1 (0)| 00:00:01 |
|* 9 | TABLE ACCESS BY INDEX ROWID | K_ID_GRID_BUSS | 1 | 20 | 1 (0)| 00:00:01 |
|* 10 | INDEX RANGE SCAN | IDX_BUSS_NO | 2 | | 1 (0)| 00:00:01 |
|* 11 | TABLE ACCESS BY INDEX ROWID | K_ID_GR_TG_RELA | 1 | 11 | 1 (0)| 00:00:01 |
|* 12 | INDEX RANGE SCAN | IDX_GR_TG_GR_ID | 9 | | 1 (0)| 00:00:01 |
|* 13 | INDEX RANGE SCAN | IDX_G_TG_TG_ID | 1 | | 1 (0)| 00:00:01 |
|* 14 | TABLE ACCESS BY INDEX ROWID | G_TG | 1 | 24 | 1 (0)| 00:00:01 |
|* 15 | HASH JOIN OUTER | | 8 | 256 | 9035 (1)| 00:01:49 |
| 16 | INLIST ITERATOR | | | | | |
|* 17 | INDEX RANGE SCAN | K_AMR_CONFIG_IDX_CODE | 8 | 56 | 1 (0)| 00:00:01 |
|* 18 | VIEW | | 5 | 125 | 9034 (1)| 00:01:49 |
| 19 | UNION-ALL | | | | | |
|* 20 | TABLE ACCESS BY INDEX ROWID | K_AMR_CONFIG | 1 | 19 | 1 (0)| 00:00:01 |
|* 21 | INDEX RANGE SCAN | K_AMR_CONFIG_TAG_NO | 2 | | 1 (0)| 00:00:01 |
| 22 | SORT GROUP BY | | 1 | 68 | 4 (25)| 00:00:01 |
| 23 | NESTED LOOPS | | 1 | 68 | 3 (0)| 00:00:01 |
| 24 | NESTED LOOPS | | 16114 | 68 | 3 (0)| 00:00:01 |
| 25 | VIEW | | 1 | 28 | 2 (0)| 00:00:01 |
| 26 | TABLE ACCESS FULL | SYS_TEMP_0FD9FD2FB_8ABCBB03 | 1 | 28 | 2 (0)| 00:00:01 |
|* 27 | INDEX RANGE SCAN | IDX_GDS_NO | 16114 | | 1 (0)| 00:00:01 |
|* 28 | TABLE ACCESS BY INDEX ROWID | K_AMR_EXCEP_FLOW | 1 | 40 | 1 (0)| 00:00:01 |
| 29 | HASH GROUP BY | | 1 | 31 | 332 (2)| 00:00:04 |
| 30 | VIEW | VW_DAG_1 | 1 | 31 | 331 (1)| 00:00:04 |
| 31 | HASH GROUP BY | | 1 | 33 | 331 (1)| 00:00:04 |
|* 32 | HASH JOIN | | 1 | 33 | 330 (1)| 00:00:04 |
| 33 | VIEW | | 1 | 28 | 2 (0)| 00:00:01 |
| 34 | TABLE ACCESS FULL | SYS_TEMP_0FD9FD2FB_8ABCBB03 | 1 | 28 | 2 (0)| 00:00:01 |
| 35 | VIEW | | 47 | 235 | 328 (1)| 00:00:04 |
|* 36 | FILTER | | | | | |
| 37 | HASH GROUP BY | | 47 | 6345 | 328 (1)| 00:00:04 |
| 38 | VIEW | VW_DAG_0 | 929 | 122K| 328 (1)| 00:00:04 |
| 39 | HASH GROUP BY | | 929 | 55740 | 328 (1)| 00:00:04 |
|* 40 | TABLE ACCESS BY INDEX ROWID| K_AMR_GBTD_FLOW | 929 | 55740 | 327 (1)| 00:00:04 |
|* 41 | INDEX RANGE SCAN | IDX_MAKE_TIME | 23042 | | 132 (0)| 00:00:02 |
| 42 | HASH GROUP BY | | 1 | 150 | 8037 (1)| 00:01:37 |
| 43 | VIEW | VW_DAG_3 | 1 | 150 | 8036 (1)| 00:01:37 |
| 44 | HASH GROUP BY | | 1 | 75 | 8036 (1)| 00:01:37 |
|* 45 | HASH JOIN | | 1 | 75 | 8035 (1)| 00:01:37 |
| 46 | VIEW | | 1 | 28 | 2 (0)| 00:00:01 |
| 47 | TABLE ACCESS FULL | SYS_TEMP_0FD9FD2FB_8ABCBB03 | 1 | 28 | 2 (0)| 00:00:01 |
| 48 | VIEW | | 267 | 12549 | 8033 (1)| 00:01:37 |
|* 49 | FILTER | | | | | |
| 50 | HASH GROUP BY | | 267 | 47259 | 8033 (1)| 00:01:37 |
| 51 | VIEW | VW_DAG_2 | 5333 | 921K| 8033 (1)| 00:01:37 |
| 52 | HASH GROUP BY | | 5333 | 572K| 8033 (1)| 00:01:37 |
|* 53 | TABLE ACCESS FULL | K_AMR_LBTZ_FLOW | 5333 | 572K| 8032 (1)| 00:01:37 |
| 54 | HASH GROUP BY | | 1 | 143 | 330 (1)| 00:00:04 |
| 55 | VIEW | VW_DAG_4 | 1 | 143 | 329 (1)| 00:00:04 |
| 56 | HASH GROUP BY | | 1 | 76 | 329 (1)| 00:00:04 |
| 57 | NESTED LOOPS | | 1 | 76 | 328 (0)| 00:00:04 |
| 58 | VIEW | | 1 | 16 | 2 (0)| 00:00:01 |
| 59 | TABLE ACCESS FULL | SYS_TEMP_0FD9FD2FB_8ABCBB03 | 1 | 28 | 2 (0)| 00:00:01 |
|* 60 | TABLE ACCESS BY INDEX ROWID | K_AMR_GBTD_FLOW | 1 | 60 | 326 (0)| 00:00:04 |
|* 61 | INDEX RANGE SCAN | IDX_MAKE_TIME | 23042 | | 132 (0)| 00:00:02 |
| 62 | HASH GROUP BY | | 1 | 143 | 332 (2)| 00:00:04 |
| 63 | VIEW | VW_DAG_6 | 1 | 143 | 331 (1)| 00:00:04 |
| 64 | HASH GROUP BY | | 1 | 67 | 331 (1)| 00:00:04 |
|* 65 | HASH JOIN | | 1 | 67 | 330 (1)| 00:00:04 |
| 66 | VIEW | | 1 | 28 | 2 (0)| 00:00:01 |
| 67 | TABLE ACCESS FULL | SYS_TEMP_0FD9FD2FB_8ABCBB03 | 1 | 28 | 2 (0)| 00:00:01 |
| 68 | VIEW | | 1 | 39 | 328 (1)| 00:00:04 |
|* 69 | FILTER | | | | | |
| 70 | HASH GROUP BY | | 1 | 169 | 328 (1)| 00:00:04 |
| 71 | VIEW | VW_DAG_5 | 19 | 3211 | 328 (1)| 00:00:04 |
| 72 | HASH GROUP BY | | 19 | 1786 | 328 (1)| 00:00:04 |
|* 73 | TABLE ACCESS BY INDEX ROWID| K_AMR_GBTD_FLOW | 19 | 1786 | 327 (1)| 00:00:04 |
|* 74 | INDEX RANGE SCAN | IDX_MAKE_TIME | 23042 | | 132 (0)| 00:00:02 |
------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
7 - filter("A"."STAFF_NO"<>'无' AND "A"."DATA_OPER_TYPE"<>'D' AND "A"."STAFF_NO" IS NOT NULL)
8 - access("A"."AUTH_USER_NO"='P68120521')
filter("A"."AUTH_USER_NO"<>'无')
9 - filter("B"."DATA_OPER_TYPE"<>'D')
10 - access("B"."BUSS_NO"="A"."STAFF_NO")
filter("B"."BUSS_NO"<>'无')
11 - filter("R"."DATA_OPER_TYPE"<>'D')
12 - access("B"."GR_ID"="R"."GR_ID")
filter("R"."GR_ID" IS NOT NULL)
13 - access("R"."TG_ID"="T"."TG_ID")
14 - filter("T"."PUB_PRIV_FLAG"='01' AND "T"."RUN_STATUS_CODE"='01')
15 - access("AA"."IDX_CODE"(+)="K"."IDX_CODE")
17 - access("K"."IDX_CODE"='PD0002' OR "K"."IDX_CODE"='PD0004' OR "K"."IDX_CODE"='PD0006' OR
"K"."IDX_CODE"='PD0008' OR "K"."IDX_CODE"='PD0009' OR "K"."IDX_CODE"='PD0012' OR "K"."IDX_CODE"='PD0013' OR
"K"."IDX_CODE"='PD0014')
18 - filter("AA"."IDX_CODE"(+)='PD0002' OR "AA"."IDX_CODE"(+)='PD0004' OR "AA"."IDX_CODE"(+)='PD0006' OR
"AA"."IDX_CODE"(+)='PD0008' OR "AA"."IDX_CODE"(+)='PD0009' OR "AA"."IDX_CODE"(+)='PD0012' OR
"AA"."IDX_CODE"(+)='PD0013' OR "AA"."IDX_CODE"(+)='PD0014')
20 - filter("C"."TAG_TYPE"='02')
21 - access("C"."TAG_NO"=:B1)
27 - access("F1"."ORG_NO"="F"."GDS_NO")
filter("F"."GDS_NO" IS NOT NULL)
28 - filter("F"."TG_ID" IS NOT NULL AND ("F"."TAG_NO"='TagPBDDY' OR "F"."TAG_NO"='TagPBGZ' OR
"F"."TAG_NO"='TagPBYZBPH' OR "F"."TAG_NO"='TagPBZZ') AND
SUBSTR(REPLACE("FIRST_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm') AND "F1"."TG_ID"=TO_NUMBER("F"."TG_ID"))
32 - access("F1"."TG_ID"=TO_NUMBER("FF"."TG_ID") AND "F1"."ORG_NO"="FF"."GDS_NO")
36 - filter(COUNT("ITEM_1")>=2)
40 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND "F"."TAG_NO"='TagPBGZTD')
41 - access(SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
45 - access("F1"."TG_ID"=TO_NUMBER("FF"."TG_ID") AND "F1"."ORG_NO"="FF"."GDS_NO")
49 - filter(COUNT("ITEM_1")>=3)
53 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND
SUBSTR(REPLACE("FIRST_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm') AND "F"."TAG_NO"='TagLBTZ')
60 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND "F"."TAG_NO"='TagZBBS' AND
"F1"."TG_ID"=TO_NUMBER("F"."TG_ID"))
61 - access(SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
65 - access("F1"."TG_ID"=TO_NUMBER("FF"."TG_ID") AND "F1"."ORG_NO"="FF"."GDS_NO")
69 - filter(COUNT("ITEM_1")>=2)
73 - filter("F"."GDS_NO" IS NOT NULL AND "F"."TG_ID" IS NOT NULL AND "F"."TAG_NO"='TagZBBS')
74 - access(SUBSTR(REPLACE("MAKE_TIME",'-',''),1,6)=TO_CHAR(SYSDATE@!,'yyyymm'))
3秒内出结果,业务正常。
该sql还存在优化空间,K_AMR_LBTZ_FLOW表也可以加上同样的函数索引。
create index cpss.idx_MAKE_TIME on cpss.K_AMR_LBTZ_FLOW(substr(replace(FIRST_TIME, '-', ''), 1, 6),TAG_NO);
将K_AMR_GBTD_FLOW表重复的查询同样用with改写
针对SELECT FF.GDS_NO,
F1.AUTH_USER_NO,
COUNT(DISTINCT FF.TG_ID) COUNT,
'PD0009' IDX_CODE
FROM (SELECT F.GDS_NO, F.TG_ID
FROM K_AMR_GBTD_FLOW F
WHERE F.TG_ID IS NOT NULL
AND F.GDS_NO IS NOT NULL
AND F.TAG_NO = 'TagPBGZTD'
AND SUBSTR(REPLACE(MAKE_TIME, '-', ''), 1, 6) =
TO_CHAR(SYSDATE, 'yyyymm')
GROUP BY F.GDS_NO, F.TG_ID
HAVING COUNT(DISTINCT F.MSG_ID) >= 2) FF,
F1
WHERE F1.TG_ID = FF.TG_ID
AND F1.ORG_NO = FF.GDS_NO
GROUP BY F1.AUTH_USER_NO, FF.GDS_NO
这条sql语句,我们可以在索引上加上更多的列,减少回表操作(但是维护索引中的各个字段,将会增加其他dml操作的时间)
create index cpss.idx_MAKE_TIME on cpss.K_AMR_GBTD_FLOW(substr(replace(MAKE_TIME, '-', ''), 1, 6),TAG_NO,GDS_NO,TG_ID,MSG_ID);