【发布时间】:2019-03-18 12:41:52
【问题描述】:
我们要求从下表中获取具有上述匹配条件的记录并将 UNIQUE COL3 的计数限制为 20K。
我们通过使用DENSE_RANK() 逻辑实现了这一点,但我们发现在实时系统中实现时性能极其缓慢。
要处理 20K UNIQUE COL3 和 60K 总记录,需要 14-15 小时才能完成(该过程在每日 JOB 上运行并选择 FROM 视图并根据查看记录对少数表执行 DML 操作)。
SELECT COUNT (distinct COL3) CNT1,COUNT(1) CNT2 FROM VW_ENTP;
--20,000 60,000
没有 DENSE_RAN() 逻辑它完成得非常快,但使用 DENSE_RAN() 它非常慢。
请求您的帮助以分享任何关于提高查询性能的建议或任何替代方法。提前致谢!
示例查看代码
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;
注意:以上使用的列已编入索引。
【问题讨论】:
-
专家您好-有什么更新吗?任何想法将不胜感激。