マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

インデックスがないテーブルには基本的にデータの並び順に保証がないため、
これ検索する場合は、性能的に遅い「テーブル スキャン」を実行する。
このため、検索処理の効率化のために、検索条件に対応した「インデックス」を作成する。

SQL Serverのインデックスには、

の6種類のインデックスがある。

インデックス種類

「クラスタ化インデックス」

「クラスタ化インデックス」はOracleの「索引構成表」と同じであり、
「電話帳の50音順索引」のように、データが順番に並べられたインデックスのことを言う。

「非クラスタ化インデックス」

「非クラスタ化インデックス」はOracleの「索引」と同じであり、
「書籍の索引」のように、データとは別の領域に作られたインデックスのことを言う。

「カバリング インデックス」

「付加列インデックス」

といった性能上の問題が存在する。

「パーティション インデックス」

「インデックス付きビュー」

インデックスの構造

インデックス ページ

インデックスの構造について説明する。

によって構成される。

インデックス ページ

「クラスタ化インデックス」

次に、「クラスタ化インデックス」の構造について説明する。

クラスタ化インデックス

ディスクI/Oのチューニング

「クラスタ化インデックス」でディスクI/Oのチューニングが可能である。

適合しないケース

また、以下のキーには適していないと言われている

その他

「クラスタ化インデックス」作成時には、
実際のデータ(ヒープ)を並べ替えた結果を格納しておくための作業領域として、
テーブル サイズの約 1.5 倍の空き領域が必要になるため注意が必要である。

参考

「非クラスタ化インデックス」

次に、「非クラスタ化インデックス」の構造について説明する。

で構造が異なる。

「クラスタ化インデックス」が存在しない「非クラスタ化インデックス」

「クラスタ化インデックス」が存在しない「非クラスタ化インデックス」

「クラスタ化インデックス」が存在する「非クラスタ化インデックス」

「クラスタ化インデックス」が存在する「非クラスタ化インデックス」

「カバリング インデックス」

「付加列インデックス」

「パーティション インデックス」

「インデックス付きビュー」

インデックスと選択度

「非クラスタ化インデックス」と選択度

「非クラスタ化インデックス」は、選択度の低い項目に対しては不利である。

「クラスタ化インデックス」と選択度

「クラスタ化インデックス」は、選択度の低い項目に対して"も"有効である。

計算式

1000(レコード) / 10(レコード / ページ) / 8(ページ / エクステント) ≒ 13エクステント ≒ 13回のI/O

※ SQL Server は、ディスクI/Oを、ディスク上管理単位である「エクステント」単位で処理する。

選択度とインデックスの「ページ分割」

なお、選択度の低いデータでは、どちらのインデックスでも、
データの挿入時に、「ページ分割」が発生しやすくなり、不利である。

「ページ分割」については、
「インデックスの断片化」の管理」で説明する。

選択度の低い項目をキーにした「クラスタ化インデックス」の作成は、

のトレードオフを考慮する形になる。

「インデックスの断片化」の管理

「インデックスの断片化」とは

DBの「データ ファイル」は、

から構成される。

「セグメント」とは、テーブル、インデックスといった、オブジェクトを意味する。

SQL Server は、

「セグメント」、「エクステント」、「ページ」
インデックスの断片化(ページ分割が進んだ状態)
インデックスの断片化による余分なI/Oの発生

「ページ密度」とは

繋がる。このため、なるべく「ページ分割」が発生しないようにする必要がある。

「ページ密度」の設定

「ページ密度」は、「FILLFACTOR」オプションで設定することができる。

「FILLFACTOR」オプション

のオプションで指定できる。

の「ページ密度」を制御する。

「PAD_INDEX」オプション


Tags: :データアクセス, :SQL Server


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS