与此问题相关:In what order does execution on WHERE and ON clauses work?
我正在阅读此页面关于APPLY:
我不明白CROSS APPLY,TOP和DESC如何更快地进行此查询。
原始查询:
SELECT s.StartedAt, s.EndedAt, c.AirTime
FROM dbo.Commercials s JOIN dbo.Calls c
ON c.AirTime >= s.StartedAt AND c.AirTime < s.EndedAt
WHERE c.AirTime BETWEEN '20080701' AND '20080701 03:00'
查询速度更快:
SELECT s.StartedAt, s.EndedAt, c.AirTime
FROM dbo.Calls c CROSS APPLY(
SELECT TOP 1 s.StartedAt, s.EndedAt FROM dbo.Commercials s
WHERE c.AirTime >= s.StartedAt AND c.AirTime < s.EndedAt
ORDER BY s.StartedAt DESC) AS s
WHERE c.AirTime BETWEEN '20080701' AND '20080701 03:00'
我不知道要问什么具体问题,因为我没有得到它。
答案 0 :(得分:4)
您的第二个查询可能更快,因为您将结果集限制为最多连接1行;第一排。几乎没有计算或连接匹配。在这种情况下,您的CROSS APPLY
就像一个单一的函数。