web-dev-qa-db-ja.com

どちらが良いですか:ブックマーク/キー検索またはインデックススキャン

インデックスseekはインデックスscanよりも優れていることを知っていますが、SQL ServerのExplainプランでは、インデックスシークまたはキールックアップ(SQL Server 2000のブッ​​クマーク)の方が適しています。

彼らがSQL Server 2008の名前を再度変更していないことを教えてください...

45
OMG Ponies

インデックスシーク、毎回。

ルックアップは負荷が高いため、これはインデックスをカバーし、特にINCLUDE句を追加してインデックスを改善しています。

たとえば、行が1つだけであることが予想される場合、検索に続くシークは、クエリをカバーするよりも優れていると言えます。特定の状況でさらに別のインデックスを回避するために、これに依存しています。

編集:簡単なトーク記事: カバリングインデックスを使用してクエリのパフォーマンスを向上させる

編集、2012年8月

ルックアップは1行ごとに行われるため、スケールが大きくありません。最終的に、オプティマイザはシーク+ルックアップの代わりにクラスタ化インデックススキャンを選択します。これは、多くのルックアップよりも効率的だからです。

48
gbn

キールックアップveryと類似しています(2005 SP2より前は「ルックアップ付きシーク」と呼ばれていました)。唯一の違いは、キールックアップが実行エンジンにクラスター内のより多くのキーをプリフェッチするように指示する追加のPRE-FETCH引数を指定できることです(つまり、クラスター化インデックスシークとそれに続くスキャンを実行する)。

キールックアップを確認しても、怖がることはありません。ネストされたループで使用される通常の演算子です。ネストされたループは、ありふれた結合演算子です。計画を改善したい場合は、結合を改善して、結合の代わりにマージ結合を使用できるかどうかを確認してください(つまり、結合の両側で同じキー順序で行を提供でき、最速の結合)またはハッシュ結合(十分なQOがハッシュ結合を検討するためのメモリ、または結合後ではなく結合前に行をフィルタリングすることでカーディナリティを削減します)。

10
Remus Rusanu

このSO質問 は、キールックアップは回避すべきものであると述べています。

2
Dustin Venegas