SQL Serverのインデックス構造(後編):SQL Server 2000 チューニング全工程(5)(2/2 ページ)
本連載ではSQL Server 2000のチューニングに関するノウハウを解説する。SQL Server 2000は自動チューニング機能を持つために、チューニングはあまり必要ないと思われがちだが、そのアーキテクチャを理解し適切にツール類を使用しなければ、本来のパフォーマンスを得られない。(編集局)
インデックス定義における考慮事項
クラスタ化インデックスと非クラスタ化インデックスの両方を定義する場合は、非クラスタ化インデックスを定義する前に、クラスタ化インデックスを定義します。手順が逆になると、クラスタ化インデックスの定義時に物理的な並べ替えが発生するため、その時点で定義されていた非クラスタ化インデックスの再構築が行われてしまい、効率が悪いためです。また、非クラスタ化インデックスを使用したクエリでBETWEEN句を使用した範囲検索を行うと、繰り返しクラスタ化インデックスを使用したアクセスが発生し、効率が悪くなる場合があります。
クエリをカバーするインデックス
上記の例で使用しているクエリでは選択リストに「*」(アスタリスク)を使用していますが、その記述を以下のように書き換えてみたらどうでしょうか。
SELECT 姓,生年月日 FROM 顧客 WHERE 生年月日 BETWEEN '1951/5/10' AND '1967/6/20'
このクエリでは、SELECT文で参照される列のデータは、すべて非クラスタ化インデックスのリーフ・ページに含まれていることが分かります。このクエリを実行した場合、インデックス内の検索は非クラスタ化インデックスのリーフ・ページまでで済んでしまうため、クラスタ化インデックスを使用してデータページまでアクセスする必要がありません。このようなインデックスのことを「クエリをカバーするインデックス」と呼びます。クエリをカバーするインデックスは非クラスタ化インデックスで使用できます。
これで本連載は終了します。ご愛読、ありがとうございました。(連載完)
Copyright © ITmedia, Inc. All Rights Reserved.