-2

この質問に関連: WHERE 句と ON 句の実行はどのような順序で行われますか?

私はAPPLYについてこのページを読んでいました:

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/07/07/using-cross-apply-to-optimize-joins-on-between-conditions.aspx

また、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'

わからないので具体的に何を質問すればいいのかわからない。

4

1 に答える 1

4

結合する結果セットを最大 1 行に制限しているため、2 番目のクエリの方が高速である可能性があります。最初の行。そのために必要な計算や結合マッチングはほとんどまたはまったくありません。この場合、 yourCROSS APPLYは特異関数のように機能しています。

于 2013-12-11T14:54:52.207 に答える