2005年10月05日

行の検索

○ インデックスを使用しない場合
indid = 0
IAM ページをスキャンしてヒープのページを保持しているエクステントを見つけ、テーブルスキャンを実行
ヒープ
  データページのコレクション
  データはランダムに格納
  ページ間で相互リンクなし
IAM … 順番が定義されていないページで唯一位置情報を定義している情報

○ クラスタ化インデックスを使用した場合
indid = 1
root 列 … クラスタ化インデックスのルートレベル
ルートレベルよりインデックスをたどって移動、クラスタ化インデックスキーに対応する列を検索

 
連続した範囲のキー検索は範囲内の開始キー値を見つけ、前後のポインタを使用して各データページをスキャン

○ 非クラスタ化インデックスのみを使用した場合
indid = 2 〜 250
root 列 … 非クラスタ化インデックスのルートレベル
ルートレベルよりインデックスをたどって移動、非クラスタ化インデックスキーとともに行ロケータを取得
行ロケータによってポイントされた対応する行をヒープより取得

○ クラスタ化インデックスと非クラスタ化インデックスを併用した場合

 
ルートレベルより非クラスタ化インデックスをたどって移動、非クラスタ化インデックスキーとともにクラスタ化キーを取得
取得したクラスタ化キーを用いて再度クラスタ化インデックスをルートレベルより検索
クラスタ化インデックスキーに対応する行を見つける
実データの物理的位置が変更になっても非クラスタ化インデックスに影響なし
検索パフォーマンスは多少低下
データの修正と保守に高いパフォーマンス ← データ更新によるページ分割の影響を受けない
SQL Server 7.0 以降変更?
posted by w@ko at 18:22|  ・SQL Server ノート | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。