II-22-1. インデックスの概念

データベース検索の高速化に必須の技術であるインデックスの概念について解説する。探索のアルゴリズムなどインデックスの原理について説明し、インデックスの物理的な構造や性能、リカバリ特性など、インデックスに関する基本的な考え方を示す。

【学習の要点】

* データベースに保存されたデータは、二分検索、B木検索、B+木検索などの検索アルゴリズムを利用したインデックスを作成して検索が行われる。

* インデックスは物理的な配置方法の違いにより、クラスタードインデックスと非クラスタードインデックスがある。

図II-22-1. 木構造の例

【解説】

1) インデックスとは

インデックスはデータベースのレコードを効率よくアクセスするために用いられる。

インデックスは本の巻末に記載されている索引と同様の役割を持つ。例えば、本に索引が存在しない場合は、目的の語を見つけるためには、全文を最初から読んで探していかなければならない。本にアルファベット順に並べられた索引があれば、語句の一覧に示されたページを見て、そのページから目的の語句をすばやく探し出すことができる。その反面、本の索引を作成するには相応の労力とページ数が必要でコストがかかる。本の内容によっては索引の有用性が低いこともある。

2) インデックスの構造

データベースにおいても本の索引と同様に、インデックスによって、検索時にレコードに対してより効率よくアクセスすることができる。

本の索引と同様の考え方で、コンピュータ上でファイルに索引を持たせる方法を、ISAM(索引表付き順編成ファイル)と呼ぶ。このような構造を持たせたインデックスを利用しても、検索効率は向上するが、データの更新を繰り返すと、性能が低下していく問題がある。

そのため、よりも高いパフォーマンスを得るために、木構造と呼ばれるインデックスを採用する場合も多い。

3) インデックスの特徴

インデックスはDBの性能のみに関係する。インデックスの設定によって、検索やソートのパフォーマンスを上げることができる。言い換えれば、インデックスを設定しなければ、目的のレコードを抽出するために、全レコードを読み込んで検索することが必要になることがある。

主キーやユニークキーはデータベースの行を一意に特定するもので、インデックスを必ずしも内包するわけではなく、異なる概念であるが、キーは行の追加時に重複の確認をする必要があるので、パフォーマンス向上のためにキーを設定するとインデックスも自動的に設定されるRDMBSも存在する。重複がないインデックスをユニークインデックスという。

4) インデックスの設定

インデックスは全体的に張り巡らせれば良いというわけではない。インデックスの設定が効果的な場合と、逆効果になりがちな場合がある。効果的な場合とそうでない場合の例を以下に挙げる。

インデックスは、インデックス用にデータ量が増大するためディスク必要量が増大することにも注意が必要である。

また、データの更新が多いテーブルでは、レコードの登録、削除と同時にインデックスを更新する処理が必要になるため慢性的に負荷が増大しパフォーマンスが低下することがある。

* 効果的な場合

- 検索条件に使われることが多い

- 結合に使われることが多い

- ソートやグループ化で使われることが多い

* 非効果的な場合

- レコード数が少ない

- カーディナリティが低い(重複した値が多く値の分布が少ない)

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。