この質問に関連: WHERE 句と ON 句の実行はどのような順序で行われますか?
私は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'
わからないので具体的に何を質問すればいいのかわからない。