CROSS APPLY
対 INNER JOIN
最近。私はいくつかのクエリを書いてみましたが、どちらも同じように機能し、実行計画も同じようです。
たぶん、より深い知識を持つ誰かが私にこれらの2つの違いは何であるかを説明できますか?
OUTER APPLY (SELECT UserID
, ActionPerformedDate = MAX(ActionDate)
FROM dbo.AdminUsage
WHERE SubscriberID = S.SubscriberID
AND ActionPerformed = 'Some Action'
AND Description = 'True'
GROUP BY UserID) AS AU
LEFT JOIN (SELECT SubscriberID
, UserID
, MAX(ActionDate) OVER(PARTITION BY SubscriberID) AS ActionPerformedDate
FROM dbo.AdminUsage
WHERE ActionPerformed = 'Some Action'
AND Description = 'True') AS AU
ON AU.SubscriberID = S.SubscriberID
この場合、推奨されるアプローチはありますか?
これらは、例のように、同じ目的で使用できる2つのわずかに異なる動物です。ただし、CROSS APPLYは、テーブル値関数を「結合」し、XMLドキュメントを「拡張」するための唯一のオプションです。
一部のクエリ、特に並列クエリでは、必要なプロセッサスレッドとインデックス作成戦略があれば、CROSS APPLYを使用するとパフォーマンスが大幅に向上します。
Microsoft MVP Itzik Ben-Ganは、いくつかの優れた例を この講演 で詳しく説明しています。