連載
» 2005年03月18日 00時00分 公開

SQL Server 2000 チューニング全工程(5):SQL Serverのインデックス構造(後編) (2/2)

[沖要和,NRIラーニングネットワーク]
前のページへ 1|2       

インデックス定義における考慮事項

 クラスタ化インデックスと非クラスタ化インデックスの両方を定義する場合は、非クラスタ化インデックスを定義する前に、クラスタ化インデックスを定義します。手順が逆になると、クラスタ化インデックスの定義時に物理的な並べ替えが発生するため、その時点で定義されていた非クラスタ化インデックスの再構築が行われてしまい、効率が悪いためです。また、非クラスタ化インデックスを使用したクエリでBETWEEN句を使用した範囲検索を行うと、繰り返しクラスタ化インデックスを使用したアクセスが発生し、効率が悪くなる場合があります。

図3 非クラスタ化インデックスとクラスタ化インデックスを使用した範囲検索(クリックで拡大します) 図3 非クラスタ化インデックスとクラスタ化インデックスを使用した範囲検索
(クリックで拡大します)

クエリをカバーするインデックス

 上記の例で使用しているクエリでは選択リストに「*」(アスタリスク)を使用していますが、その記述を以下のように書き換えてみたらどうでしょうか。

SELECT 姓,生年月日 
FROM 顧客 
WHERE 生年月日 BETWEEN '1951/5/10' AND '1967/6/20'

 このクエリでは、SELECT文で参照される列のデータは、すべて非クラスタ化インデックスのリーフ・ページに含まれていることが分かります。このクエリを実行した場合、インデックス内の検索は非クラスタ化インデックスのリーフ・ページまでで済んでしまうため、クラスタ化インデックスを使用してデータページまでアクセスする必要がありません。このようなインデックスのことを「クエリをカバーするインデックス」と呼びます。クエリをカバーするインデックスは非クラスタ化インデックスで使用できます。


 これで本連載は終了します。ご愛読、ありがとうございました。(連載完)

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。