2009-03-24 9 views
2

SQL 2000からSQL 2008への移行を検討し始めたばかりで、新しいCROSS APPLY構文とINNER APPLY構文に注目しています。テーブル値を持つパラメータ化UDFまたは相関サブクエリ。Microsoft SQL Server 2008におけるJOINとAPPLYの相対効率

明らかに、UDFにロジックをカプセル化し、それを別のクエリで再利用できるようになるのはうれしいことですが、機能にはコストがかかります。

私はかなりネットを見回しましたが、インライン化した場合に得られるものよりもAPPLYベースのクエリを使用したときにどれだけパフォーマンスが低下するかを示すパフォーマンスメトリックは見つかりませんでした。同じクエリ。

正確な影響は特定のスキーマとクエリに大きく依存することがわかりましたが、実際のシステムをチューニングしてこれを共有する経験があれば、私は不思議でした。

答えて

4

私はAPPLYを場所で使用します。実行する必要がある場合は、ループではなく行ごとの処理を強制するのが便利です。

奇妙なことに、オプティマイザがUDFをブラックボックスとして処理し、私が望むようにフィルタを適用したため、1つの場所で効率的です(プロファイラを使用して読み込みを行うと効率的です)。

udfは、オプティマイザがクエリ全体を調べて別の場所にフィルタを適用したため、JOINで展開/ネストされていないときに悪化したインラインテーブル値関数です。

そうでなければ、私はそれを控えめに使用するか、頻繁に実行されないコードで使用し、本当に悪いことではないことを確認してください。私は保守性を得るためにヒットを受け入れる。

トピックを外しています:カプセル化は、これまでのところデータベースでのみ行われます。ある時点で、セットベースの利点を失います。

+1

"オフトピック:カプセル化はこれまでのところデータベースでしか行われていません。ある時点ではセットベースの利点を失います。"それを言うだけのプラスプラス! – HLGEM

+0

はい、それはSQL開発の基本的な緊張のようです... :) – mwigdahl

関連する問題