0

SQL Server 2008 の関数に問題があります。関数を使用してクエリを実行すると、40 秒ほどかかります。関数を削除してクエリに関数のロジックを追加すると、0 秒になります。

関数の使用が非常に遅くなる理由を誰かが説明できますか? 関数を使用してロジックをカプセル化したいのですが、方法が見つかりません...

4

1 に答える 1

0

JOIN または WHERE 句でスカラー UDF を使用すると、SQL Server に強制的にテーブル スキャンを実行させるインデックスの使用を防ぐことができます。また、SQL Server が行数を正しく見積もることができなくなり、後で間違ったプランを選択する可能性があります。合計できるすべての行の呼び出しコストもあります。

一般に、スカラー値の UDF を避けることをお勧めします。ただし、インライン テーブル値関数を使用してロジックをカプセル化できます。ビューと同じように処理され、オプティマイザによって解決されます。重要なのは、インライン TVF タイプを使用していることです。複数ステートメントの TVF は、スカラー UDF よりもさらに悪いです。

詳細については、こちらの記事をご覧ください:さまざまな種類の関数のパフォーマンス比較

于 2012-11-01T17:35:10.870 に答える