web-dev-qa-db-ja.com

SQLサーバーの一時テーブルとカーソル

SQL Serverのストアドプロシージャでは、一時テーブルを使用するタイミングとカーソルを使用するタイミング。パフォーマンスに関して最良のオプションはどれですか?

21
SARAVAN

可能であれば回避ペストのようなカーソル。 SQL Serverはset-based --RBAR(row-by-agonizing-row)方式で行う必要があることはすべて遅く、遅くなり、SQLの動作の基本原則に反します。

あなたの質問は非常に曖昧です-その情報に基づいて、私たちはあなたが何をしようとしているのか本当にわかりません。ただし、主な推奨事項は変わりません。可能な場合は常に(ほとんどの場合可能です)、セットベースの操作を使用してください- SELECT, UPDATE, INSERT andjoins-手続き的思考をSQLServerに強制しないでください-これは最善の方法ではありません。

したがって、セットベースの操作を使用して一時テーブルを埋めて使用できる場合は、毎回カーソルよりもその方法をお勧めします。

21
marc_s

カーソルは行ごとに機能し、パフォーマンスは非常に低くなります。ほとんどの場合、それらはより良いセットベースのコードに置き換えることができます(通常は一時テーブルではありません)

一時テーブルは、データ量とそれらを使用して何をしているかに応じて、問題がない場合もあります。これらは通常、カーソルの代わりにはなりません。

これを読むことをお勧めします: http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

7
HLGEM