我们有几个查询,如下所示。有没有办法改善性能或以这种方式改变以下查询,从而提供更好的性能?我们已经实现了索引。
SELECT COLUMN
FROM ABC
LEFT JOIN XYZ ON XYZ.ID=ABC.ID
AND ABC.COlumn_3='Y'
AND ABC.Column_4='Y'
AND XYZ.ID_2 =
(SELECT TOP 1 ID_2
FROM XYZ
WHERE XYZ.ID = ABC.ID
ORDER BY ID_2 DESC)
答案 0 :(得分:0)
也许:
SELECT TOP 1 COLUMN
FROM ABC
LEFT JOIN XYZ ON XYZ.ID=ABC.ID
AND ABC.COlumn_3='Y'
AND ABC.Column_4='Y'
ORDER BY XYZ.ID_2 DESC
刚看了一下你的查询,最后AND XYZ.ID_2
过滤有点多余。
另外,如果可能的话,尝试使用INNER JOIN,它会更快
答案 1 :(得分:0)
另一件事是不使用子查询。它们将在每一行执行。如果您有想要获得的静态值,请存储在变量中:
@value = (Select TOP 1 ID_2 From XYZ);
SELECT Column FROM ABC LEFT JOIN XYZ ON XYZ.ID=ABC.ID AND ABC.COlumn_3='Y' AND ABC.Column_4='Y' AND XYZ.ID_2 = @value
使用动态值时,请使用连接:
SELECT Column
FROM ABC
LEFT JOIN XYZ ON XYZ.ID=ABC.ID AND ABC.COlumn_3='Y' AND ABC.Column_4='Y'
LEFT JOIN (Select TOP 1 ID_2 From XYZ Where XYZ.ID = ABC.ID Order By ID_2 DESC) XYZ2 ON XYZ.ID = XYZ2.ID_2
不确定查询是否100%正确,但希望您明白我的观点。