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