У нас есть требование получить записи из приведенных ниже таблиц с указанным условием сопоставления и ограничить счет UNIQUE COL3 до 20K.
Мы достигли этого с помощью логики DENSE_RANK()
, но мы наблюдали очень медленнуюв производительности, когда мы внедрили в живую систему.
Для обработки 20K UNIQUE COL3 и 60K итоговых записей требуется 14-15 часов (процесс выполняется на ежедневной JOB и выбирается из режима просмотра и выполненияОперация DML для нескольких таблиц на основе записей View).
SELECT COUNT (distinct COL3) CNT1,COUNT(1) CNT2 FROM VW_ENTP;
--20,000 60,000
Без логика DENSE_RAN()
завершается очень быстро, но с DENSE_RAN()
она чрезвычайно медленная.
Запросите вашу помощь, чтобы поделиться любой рекомендацией по УЛУЧШЕНИЮ QUERY PERFORMANCE или любым другим подходом.Заранее благодарим!
Пример кода
CREATE OR REPLACE VIEW VW_ENTP(COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10) AS
SELECT
COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9, COL10
FROM
(
SELECT
NP.NFCD COL1,
D.CLO2 COL2,
NP.COL3 COL3,
E.COL4 COL4,
EDT.COL5,
EDT.COL6,
NP. COL7,
NP. COL8,
EDT.COL9 COL9,
NP.COL10,
DENSE_RANK() OVER (ORDER BY NP.COL3) RANK
FROM ENP NP,EDTS EDT,EM E,EDT D,BDT BD
WHERE EDT.COL2=D.COL2
AND E.COL3=NP.COL3
AND E.COL7=NP.COL7
AND E.COL8=NP.COL8
AND E.APP=NP.APP
AND NP.STATUS='P'
AND NP.NFCD=D.COL1
AND E.SUSP !='YES'
AND NP.APP='EDOC'
AND TRUNC(NP.RC_DATE)<=TRUNC(BD.LAST_RUN_DATE)
)
WHERE RANK<=20000;
Примечание. Используемые выше столбцы индексируются.