【发布时间】:2014-11-04 06:52:57
【问题描述】:
我正在尝试优化以下 T-SQL 查询:
SELECT Person.*
FROM Person
WHERE ZipCode LIKE '123%'
AND City = 'Washington'
AND NumberOfHomes in (1, 2, 3)
AND
(
EXISTS
(
SELECT * FROM House
WHERE Person.ID = House.PersonID
AND House.Type = 'TOWNHOUSE'
AND House.Size = 'Medium'
)
OR
EXISTS
(
SELECT * FROM Color
WHERE Person.ID = Color.PersonID
AND Color.Foreground IN ('Green', 'Blue', 'Purple')
)
)
对于优化查询的任何回应,我将不胜感激。
特别是,有没有一种方法可以将查询转换为更有效的查询,只使用单个 SELECT 语句而不使用任何内部 SELECT 语句?
谢谢!
【问题讨论】:
-
如果没有查询的实际执行计划,就不能说太多。一个小提示,对于 EXISTS,您不需要返回所有行或列,只需从查询中返回 TOP 1 1 EXISTS(SELECT TOP 1 1 FROM House...)
-
@user2321864 你放什么都没关系。 SQL Server 不在乎,它知道它只是在寻找 1 行然后它可以短路,它知道它不返回任何数据。想要证明没关系?将
*替换为1/0。
标签: sql sql-server performance optimization query-optimization