【发布时间】:2016-10-07 14:04:14
【问题描述】:
我有这个问题:
select DBSAITE.MITEM, DBSAITE.MPDSC, DBSAITE.MUTMS, MVSACPE.COSTUN, PCSACST.CSTTYAPP,
SUM(PCSACST.CSTBURD1 + PCSACST.CSTBURD2 + PCSACST.CSTLABOR +
PCSACST.CSTMAT + PCSACST.CSTSETUP + PCSACST.CSTEXTRN) as COSTO_STD
from MVSACPE, PCSACST, DBSAITE
WHERE PCSACST.CSTCOSC = MVSACPE.CODSOC
AND PCSACST.CSTITEM = MVSACPE.CODITM
AND MVSACPE.CODITM = DBSAITE.MITEM
AND DBSAITE.MCOSC = 'GRS'
AND MVSACPE.CODSOC = 'GRS23'
AND MVSACPE.DTPERI = '201512'
AND MVSACPE.CODMAG = 'ALL'
AND MVSACPE.CODCOS = 'MPR'
AND PCSACST.CSTDATE = '20150630'
AND PCSACST.CSTTYPE = 'SG'
GROUP BY DBSAITE.MITEM, DBSAITE.MPDSC, DBSAITE.MUTMS, MVSACPE.COSTUN,PCSACST.CSTTYAPP
我想以某种方式优化查询,因为 join 可以处理数十万条记录并且非常慢(3 分钟)。
有什么建议吗?
【问题讨论】:
-
您正在从
SELECT语句中的联接表中选择数据,并按它们进行分组。如果您打算从这些表中检索数据,则不能使用EXISTS。EXISTS只检查它们是否……嗯……存在。它不返回任何东西。 -
您可能想查看这些表的索引方式。
-
存在什么?请描述
-
我编辑了问题,我想知道是否可以优化查询(exists子句不重要)。
-
取决于您的数据基数,但将分组放在子查询中可能会有所帮助(即,仅引用
PCSACST),因为这样更有可能使用索引。
标签: sql join db2 query-optimization exists