MS SQL Server 2000/2005のストアドプロシージャの最適化

しばらく前に、ストアドプロシージャのパフォーマンスが低い場合について書きました: razbezhkin.habrahabr.ru/blog/24231.html



これに対処する方法を説明します。



ロジックは非常に単純です。パフォーマンスが低いのは、ストアドプロシージャが最初に実行されたときに、実行計画が単一行を抽出するように最適化されたという事実によると仮定します。 次回同じストアドプロシージャを実行するときに、多数の行から選択する入力パラメーターを使用すると、最初の場合と同じ実行計画とコンパイルされたコードが使用されます。



この問題は非常に簡単に解決されます。たとえば、次のようなクエリで、入力パラメータに対するサンプルの行数の依存性を予測できる場合:SELECT * FROM Tab1 WHERE x <@ param1

その場合の解決策は次のとおりです。

ストアドプロシージャの2つのコピーを作成し、それらを異なる名前で呼び出しますが、それらは同じプログラムコードを持っています。 パラメーターの値に応じて、いずれかのプロシージャを呼び出す3番目のストアドプロシージャを記述します。



これは、返される行の数に応じて、2つのプロシージャのそれぞれが最適化され、コンパイルされるという事実につながります。1つ目は小行、2つ目は大行です。




All Articles