web-dev-qa-db-ja.com

#tempテーブルにインデックスを追加するのはいつですか?

SSMSでストアドプロシージャをテストするときに、#someTempTable____________________000000000000005B] (someField)などにインデックスが不足していると表示されることがある

私がこのようにそれらをspに追加するとき:

CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[#someTable] ([someField])
GO

速度が向上したようには見えません。そのため、そのようなインデックスを追加しないことがよくあります。いつそのようなインデックスを追加する必要がありますか?

8
O.O

クエリの実行中に一時テーブルとそのインデックスを2回以上使用する場合は、インデックスを追加します。

または、一意性などの通常のインデックスタスクを維持する

一時テーブルに読み込まれたデータが既に並べ替えられている場合は、データの並べ替えと同じクラスター化インデックスを持つ一時テーブルを作成します

[〜#〜]しかし[〜#〜]

一時テーブルにインデックスを作成する場合は、SQLサーバーの一時テーブルの再利用-の機能を考慮に入れて、CREATE TABLEステートメントで作成してみてください。テーブルの作成後に明示的にインデックスを追加すると、SQLサーバーはそのテーブルを次回再利用できなくなります

12
Oleg Dok

これ以上の情報がなければ答えるのは難しいです。一般的に言って、「状況次第」です。

一般的に言えば、インデックスの利点が元の実行コストとインデックスを作成するコストの合計よりも大きい場合は、一時テーブルにインデックスを追加します。 SET STATISTICS IOを例として使用してベンチマークを実行する必要があります。また、インデックスを追加する前と後に使用した実行プランを確認したいと思います。推奨されるインデックスは実際にはあまりお勧めできませんインデックス:-)

5
JohnS

指定した一時テーブルにローカルスコープ(単一の#で示される)があるという事実を踏まえると、テーブルは接続の存続期間中のみ存続するため、インデックスを追加することは一般的に最善ではありません。

3
OliverAsmus

テーブルの大幅な変更後に統計を更新する必要があります。例:tempTableの作成、インデックスの追加、10kレコードの挿入... UPDATE STATISTICS。

1
radarbob