SQL Server: インライン関数と複数ステートメントのテーブル値関数 – パフォーマンスに関する考慮事項
SQL Server は、複数ステートメント テーブル値関数 (MSTVF) とインライン テーブル値関数 (ITVF) の 2 種類のテーブル値関数を提供します。 どちらもテーブルを返しますが、パフォーマンスは大きく異なります。
主な違いはコンパイルにあります。ITVF はコンパイルされて事前に最適化された実行プランが生成されますが、MSTVF は解釈されて実行時に実行プランが生成されます。 これにより、特に関数が同じパラメーターで繰り返し呼び出される場合、ITVF のパフォーマンスが向上することがよくあります。
さらに、ITVF は MSTVF とは異なり、テーブル統計を利用します。この利点は、関数に大規模なデータセットのフィルタリングや結合が含まれる場合に非常に重要です。
提供された例では、MSTVF が顧客 ID フィルタリング用の別のクエリに依存しているため、オプティマイザが効率的な結合戦略を利用する能力が妨げられています。 複数の呼び出しを減らすために MSTVF を最適化すると、パフォーマンスの不一致を最小限に抑えることができますが、テーブル統計へのアクセスにより、同等の ITVF または VIEW のパフォーマンスが依然として優れています。
したがって、通常は ITVF が推奨される選択肢であり、パフォーマンスが向上し、メンテナンスが簡単になります。 ただし、MSTVF は、動的パラメーターが関係する状況や、中間結果の動的変更が必要な状況では引き続き必要です。
以上がSQL Server における MSTVF と ITVF: 複数ステートメント関数よりもインライン関数を選択する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。