我正在尝试将旧的DB2查询转换为更有效的方法,但是当我减少执行计划的成本时,我会增加时间。
这是原始代码:
SELECT *
FROM sqm11.table1 r
LEFT JOIN (SELECT R2.m1, R2.VALUE, MAX(R2.COUNT+0) AS COUNT
FROM sqm2.table2 R2
WHERE NVL(R2.COUNT,0) <= 5
AND R2.STATUS <> 'ok'
AND R2.m1 = 'ROLES'
GROUP BY R2.m1, R2.VALUE) RT ON RT.VALUE = concatfield1
WHERE r.PEREFEMPP <> 25
AND ( r.CARGA > to_date('2020-04-01-00.00.00.0000','yyyy-MM-dd hh24:mi:ss.ff9')
AND r.F_CARGA <= to_date('2020-04-22-00.00.00.0000','yyyy-MM-dd hh24:mi:ss.ff9'))
OR EXISTS (SELECT 1
FROM sqm2.table2 R2
WHERE R2.COUNT <= 5
AND R2.RETRYSTATUS <> 'ok'
AND R2.RETRYsqm1 = 'ROLES'
AND R2.RETRYVALUE=concatfield1
AND NOT EXISTS (
SELECT 1
FROM sqm11.table1 r2
WHERE r.MO = r2.MO
AND r.PP = r2.PP
AND r.OL = r2.OL
AND r.TIPO = r2.TIPO
AND r.PROD = r2.PROD
AND r.INT = r2.INT
AND r.ID = r2.ID) WITH UR
我尝试将OR EXIST
更改为INNER JOIN
,但没有改善时间,也尝试将WITH
更改为LEFT JOIN
。另外,没有很大的改善。
一些建议?
提前谢谢您
您从婴儿床中获得了多少?节省大量成本吗?之前和之后的情况是什么?
此外,为了使成本可靠,您必须具有针对基本数据和索引的体面和更新的统计信息。确保您已收集了正确且更新的统计信息。与分发一起使用和详细选项。
稍后,您可以尝试运行db2advis以获取有关索引的更多建议。
问候