2011-07-06 39 views
0

私は2つの主要な利点を考えることができます:並行性の問題を回避永続テーブル(テーブル)の代わりに一時テーブル(#テーブル)を使用する利点は何ですか?

  1. 、あなたは多くのプロセス1つのプロセスは、既存のテーブルを作成しようとして、あなたがトラブルに巻き込まれることができ、テーブルをドロップ/作成を持っている場合。
  2. パフォーマンス、私は一時テーブル(#を使用して)を作成すると、通常のテーブルよりもパフォーマンスが良いと思います。

他に理由がありますか、私の理由が間違っていますか?

答えて

1

あなたは一時的と永続的なテーブルを比較することはできません。

  • 永続テーブルはあなたのデータを保持し、任意のプロセスで使用することができます。
  • 一時的なものは捨てていると#onesはその接続あなたはさらなる処理および、そのようなのために結果をスプールする一時テーブルを使用したい

に表示されます。

2種類のテーブルの間にパフォーマンス(どちらの方法でも)の違いはほとんどありません。

いつもテーブルを削除したり作成したりするべきではありません。これに依存しているアプリケーションは、SQLコールを呼び出すだけで何か間違っています。

+0

私が知っていることは、永続的なテーブルの削除と作成が間違っていることに同意します。私は#テーブルが違うことを知りたかったのです。主な違いはスコープです... –

+0

スコープとはtempdbにあります。あなたの質問は並行性とパフォーマンスを具体的に問いませんが、いずれも真ではありません – gbn

+0

Hmmmしかし、グローバルな一時テーブルスコープを使用すると違いはありません... –

0

(1)TempテーブルはSQL Server TEMPDBデータベースで作成されるため、より多くのIOリソースとロックが必要です。テーブル変数と派生テーブルはメモリ内に作成されます。

(2)一般的に、並列表を使用して大量のデータを処理するとパフォーマンスが向上しますが、テーブル変数は少量のデータに最適です(100行以下の経験則を使用します)。パラレル化はパフォーマンスの大幅な向上をもたらさないでしょう。

(3)ストアドプロシージャを使用して、テーブル変数または派生テーブルにデータを挿入することはできません。たとえば、次のように動作します。INSERT INTO #MyTempTable EXEC dbo.GetPolicies_sp次のエラーは、INSERT INTO @MyTableVariable EXEC dbo.GetPolicies_spを生成します。

(4)派生テーブルは、SELECTステートメントからのみ作成できますが、挿入、更新、または削除ステートメント内で使用できます。

(5)スコープの耐久性の順に、テンポラリテーブルはスコープ内で最も拡張され、次にテーブル変数、最後に派生テーブルが続きます。

+0

これは単なるインターウェブからカットアンドペーストされ、私は1)がとにかく正しいとは思わない。 – Yellowfog

+0

申し訳ありませんが、これは私のブログ&このセント%正しいものからカット&ペーストされています。あなたは、この話題に関連していない点を理由で教えてもらえますか? –

0

1) テーブル変数の有効期間は、トランザクションが実行されている間のみです.DECLARE文を最初に実行した後、@tempテーブル変数にレコードを挿入しようとすると、変数は存在しなくなりました。 1つのトランザクションでレコードを宣言して@tempに挿入してから、テーブルをクエリしようとすると、結果は同じになります。あなたが気づいたら、#tempに対してDROP TABLE文を実行する必要があります。これは、セッションが終了するまで、またはテーブルが削除されるまで、テーブルが存続するためです。

2) テーブル変数には明確な制限があります。

- テーブル変数は、非クラスタ化インデックスを持つことはできません - あなたは、テーブル変数に制約を作成することはできません - あなたは、テーブル変数 -Similaritiesとに対して作成することができません - 統計テーブル変数の列にデフォルト値を作成することはできません。一時テーブルが含まれます:

類似点を一時テーブルに含まれます:tempdbの -Clusteredインデックスで

-Instantiatedは、トランザクションにログインしている - 両方のテーブル変数と一時テーブル 上で作成することができますログ - 一時表と通常表の場合と同様に、ユーザーは表変数(SELECT、INSERT、UPDATEおよびDELETE)に対してすべてのデータ変更言語 - (DML)問合せを実行できます。

関連する問題