SQL Server 2008 の関数に問題があります。関数を使用してクエリを実行すると、40 秒ほどかかります。関数を削除してクエリに関数のロジックを追加すると、0 秒になります。
関数の使用が非常に遅くなる理由を誰かが説明できますか? 関数を使用してロジックをカプセル化したいのですが、方法が見つかりません...
SQL Server 2008 の関数に問題があります。関数を使用してクエリを実行すると、40 秒ほどかかります。関数を削除してクエリに関数のロジックを追加すると、0 秒になります。
関数の使用が非常に遅くなる理由を誰かが説明できますか? 関数を使用してロジックをカプセル化したいのですが、方法が見つかりません...
JOIN または WHERE 句でスカラー UDF を使用すると、SQL Server に強制的にテーブル スキャンを実行させるインデックスの使用を防ぐことができます。また、SQL Server が行数を正しく見積もることができなくなり、後で間違ったプランを選択する可能性があります。合計できるすべての行の呼び出しコストもあります。
一般に、スカラー値の UDF を避けることをお勧めします。ただし、インライン テーブル値関数を使用してロジックをカプセル化できます。ビューと同じように処理され、オプティマイザによって解決されます。重要なのは、インライン TVF タイプを使用していることです。複数ステートメントの TVF は、スカラー UDF よりもさらに悪いです。
詳細については、こちらの記事をご覧ください:さまざまな種類の関数のパフォーマンス比較