通常、選択 スカラー関数の結果はそれほど問題にはなりませんが、フィルタリング 簡単に数百秒かかる場合があります (必ずしもそうとは限りません)。
スカラー関数の結果でフィルタリングする必要がある場合 (WHERE col = dbo.scalar_function()
)、代わりにインライン テーブル値関数を作成すると役立つことがよくあります。結果テーブルの唯一の行としてその値を返します。次に、inner join
を実行します。 関数の結果を使用して、返された値で効果的にフィルタリングします。これが機能するのは、SQL Server が常にインライン テーブル値関数を巻き戻し、呼び出し元のクエリにインライン化できるためです。
関数が複数ステップの関数である場合、このトリックは機能しないことに注意してください。これらは巻き戻すことができません。