1. ホーム
  2. sql-server-2005

インデックスキーカラム VS インデックスインクルードカラム

2023-08-23 21:08:41

質問

インデックスキーカラムとインデックスインクルードカラムの違いについて、どなたか説明してください。

現在、私は4つのインデックスキーカラムと0つのインクルードカラムを持つインデックスを持っています。

ありがとうございます。

どのように解決するのですか?

インデックスのキーカラムはインデックスのB-treeの一部です。含まれるカラムはそうではありません。

2つのインデックスを取る。

CREATE INDEX index1 ON table1 (col1, col2, col3)
CREATE INDEX index2 ON table1 (col1) INCLUDE (col2, col3)

index1 はこの種のクエリに適しています。

SELECT * FROM table1 WHERE col1 = x AND col2 = y AND col3 = z

ここで index2 はこの種のクエリに適しています。

SELECT col2, col3 FROM table1 WHERE col1 = x

最初のクエリで index1 は、関心のある行を素早く特定するための仕組みを提供します。このクエリは(おそらく)インデックスシークとして実行され、その後、完全な行を取得するためにブックマーク検索が行われます。

2番目のクエリでは index2 はカバーリング インデックスとして機能します。インデックスがクエリを満たすために必要なすべてのデータを提供するので、SQL Server はベース テーブルをヒットする必要はまったくありません。 index1 もまた、この場合、カバーリングインデックスとして機能することができます。

カバーリングインデックスが必要だが、シークしない、あるいは、許可されたデータ型(例えば、XML)でないためにできないので、すべての列をB-treeに追加したくない場合、INCLUDE句を使用します。