查询性能

时间:2016-01-07 08:21:04

标签: sql sql-server-2008

我们有几个查询,如下所示。有没有办法改善性能或以这种方式改变以下查询,从而提供更好的性能?我们已经实现了索引。

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)

2 个答案:

答案 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%正确,但希望您明白我的观点。