Первый запрос для оптимизации: таблица ODS_SAMPLE содержит 100 миллионов записей, а таблица B содержит сотни тысяч записей.
INSERT /*+APPEND */ INTO TEMP_SAMPLE_00 NOLOGGING
(SELECT OBJEK,
ATINN,
ATZHL,
MAFID,
KLART,
ADZHL,
MAX(TST) LST_DAT
FROM ODS_SAMPLE A, PARAM B
WHERE A.COD_ZON = 'P08'
AND A.COD_ZON = B.COD_ZON
AND B.COD_GEN_CLA = 'MAT'
AND A.KLART = B.COD_TYP_CLA
GROUP BY OBJEK, ATINN, ATZHL, MAFID, KLART, ADZHL);
Второй запрос идет после первого. Объем данных, вставляемых в TEMP_SAMPLE_00, составляет около 80 миллионов строк.
INSERT /*+ APPEND */ INTO TEMP_SAMPLE_10
(SELECT
A.OBJEK,
A.ATINN,
A.ATZHL,
A.MAFID,
A.KLART,
A.ADZHL,
A.ATWRT,
A.ATFLV,
A.ATAWE,
A.ATFLB,
A.ATAW1,
A.ATCOD,
A.ATTLV,
A.ATTLB,
A.ATPRZ,
A.ATINC,
A.ATAUT,
A.AENNR,
A.DATUV,
A.LKENZ,
A.ATIMB,
A.ATZIS,
A.ATSRT,
A.ATVGLART
FROM ODS_SAMPLE A, TEMP_SAMPLE_00 B
WHERE A.OBJEK = B.OBJEK
AND A.ATINN=B.ATINN
AND A.ATZHL=B.ATZHL
AND A.MAFID=B.MAFID
AND A.KLART=B.KLART
AND A.ADZHL=B.ADZHL
AND (((A.TST = B.LST_DAT) AND (A.TST IS NOT NULL)) OR
(A.TST IS NULL))
AND A.COD_ZON = 'P08');
Я пытался использовать предложение WITH на первом шаге, но время выполнения было почти таким же.
План выполнения ниже для первого запроса:
Plan hash value: 3884167348
--------------------------------------------------------------
| Id | Operation | Name |
--------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | PX COORDINATOR | |
| 2 | PX SEND QC (RANDOM) | :TQ10002 |
| 3 | HASH GROUP BY | |
| 4 | PX RECEIVE | |
| 5 | PX SEND HASH | :TQ10001 |
| 6 | HASH GROUP BY | |
| 7 | HASH JOIN | |
| 8 | BUFFER SORT | |
| 9 | PART JOIN FILTER CREATE | :BF0000 |
| 10 | PX RECEIVE | |
| 11 | PX SEND BROADCAST | :TQ10000 |
| 12 | VIEW | VW_GBF_9 |
| 13 | HASH GROUP BY | |
| 14 | PARTITION LIST SINGLE| |
| 15 | TABLE ACCESS FULL | PARAM |
| 16 | PX BLOCK ITERATOR | |
| 17 | TABLE ACCESS FULL | ODS_SAMPLE |
--------------------------------------------------------------
А ниже для второй части:
Plan hash value: 3450208322
-------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | PX COORDINATOR | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 |
| 3 | HASH JOIN | |
| 4 | PX RECEIVE | |
| 5 | PX SEND BROADCAST | :TQ10000 |
| 6 | PX SELECTOR | |
| 7 | TABLE ACCESS FULL| TEMP_SAMPLE_00|
| 8 | PX BLOCK ITERATOR | |
| 9 | TABLE ACCESS FULL | ODS_SAMPLE |
-------------------------------------------------