我在查询时遇到了这个奇怪的性能问题,我试图弄清楚为什么会发生这种情况。这是查询的简化示例:
SELECT DISTINCT table1.status AS Status
FROM table1
INNER JOIN (
SELECT DataID, MAX(VersionNum) as mVersion
FROM table1
GROUP BY DataID
) AS b
ON table1.DataID = b.DataID
AND table1.VersionNum = b.mVersion
INNER JOIN table2
ON table1.table2ID = table2.ID
WHERE table2.field = @parameter
表 1 由有时具有相同 DataID 的行组成,这些行都有一个版本号,我需要从该组行中选择最高的数字。
表 1 包含某个 ID,可用于与 table2 连接。如果我从 table2 添加约束并且参数实际存在于 table2 中,则查询需要一分钟才能完成,返回 10 行。
如果我为 table1 添加约束,则不会出现任何性能问题,只需不到一秒钟即可完成。
我希望这是足够的信息,我真的很好奇为什么会发生这种情况以及如何解决它。
编辑:我必须提到,如果我删除第一个内部连接(过滤最大版本),性能下降就消失了。