web-dev-qa-db-ja.com

SQL Serverの一時テーブルとテーブル変数の違いは何ですか?

これは、かなりの数の神話と矛盾する見解がある領域のようです。

では、SQL Serverのテーブル変数とローカル一時テーブルの違いは何ですか?

459
Martin Smith

勉強ではなく、特定の経験に基づいて指摘したいことがいくつかあります。私はDBAとして非常に新しいので、必要に応じて修正してください。

  1. #tempテーブルはデフォルトでSQL Serverインスタンスのデフォルトの照合を使用します。そのため、特に指定がない限り、masterdbにデータベースとは異なる照合順序があると、#tempテーブルとデータベーステーブルの間で値を比較または更新するときに問題が発生する可能性があります。参照: http://www.mssqltips.com/sqlservertip/2440/create-sql-server-temporary-tables-with-the-correct-collat​​ion/
  2. 完全に個人的な経験に基づいて、利用可能なメモリはどちらがより良いパフォーマンスに影響するようです。 MSDNでは、より小さい結果セットを格納するためにテーブル変数を使用することをお勧めしますが、ほとんどの場合、その違いは目立ちません。ただし、大規模なセットでは、テーブル変数の方がはるかにメモリを集中的に使用し、クエリの速度が低下してクロールが発生する場合があることが明らかになります。
41
Kahn