Sql 查询性能

Sql 查询性能,sql,sql-server-2008,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)

我们有几个查询,如下所示。是否有任何方法可以提高性能,或者以提供更好性能的方式更改下面的查询?我们已经实现了索引

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)
也许:

查看一下您的查询,最后的
和XYZ.ID_2
过滤有点多余


另外,如果可能的话,尝试使用内部联接,它更快

另一件事是不要使用子查询。它们将针对每一行执行。如果要获取静态值,请将其存储在变量中:

@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%正确,但希望您理解我的观点。

这是mySQL还是SQL server?您真的只选择了一列吗?在剩下的问题中,这似乎不太可能。那么:您实际希望从ABC中选择多少列,从XYZ中选择多少列?
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