インデックスの解説(基本情報技術者シラバス用語)

目次

インデックス(索引)とは

インデックスとは、データベース内の特定のデータを高速に検索できるようにするための仕組みで、日本語では「索引」とも呼ばれます。データベースに登録されているデータが数十万件、数百万件と増えていくと、端から順番に探す(フルスキャン)のでは膨大な時間がかかります。インデックスを設定すると、データベース内に『どのデータがどこにあるか』を記録した「住所録」や「目次」のような索引データが別途作成され、これを活用して一瞬で対象にアクセスできるようになります。

具体例

分厚い辞書から『コンピュータ』という言葉を探すとき、1ページ目から順番に読んで探すのは非常に大変です。しかし、巻末にある『こ』のキーワード索引(インデックス)を使えば、掲載されているページ数が分かり、直接そのページを開いて見つけられます。データベースでも同様に、顧客テーブルの『電話番号』にインデックスをつけておくことで、電話番号検索の処理速度が何百倍も高速化されます。

もう少し詳しく

インデックス(Index)は、RDBの検索性能(クエリパフォーマンス)を飛躍的に高めるためのコアテクノロジーです。インデックスを設定すると、DBMSは対象となる列のデータを取り出し、検索しやすいように整理した別のデータ構造(インデックス情報)をメモリやディスク上に生成します。

最も一般的なインデックスのデータ構造は「B-Tree(B木:Balanced Tree)」と呼ばれる木構造です。B-Treeインデックスでは、データが常にソート(整列)されたツリー形式で保持されます。検索する際は、根(ルート)ノードから順に値を比較し、枝分かれをたどることで、目的のデータ(リーフノード)へ最小限のステップで到達できます。例えば、100万件のデータであっても、B-Tree構造を使用すれば、わずか数回〜十数回の比較処理(計算量はO(log N))で目的のデータを見つけ出すことができます。インデックスがない状態では、最初から最後まで順番に調べる「テーブルフルスキャン(計算量はO(N))」を行うため、劇的な速度差が生まれます。

ただし、インデックスには以下のような重大なデメリット(トレードオフ)も存在します。

1. 更新処理(INSERT, UPDATE, DELETE)の遅延:データが追加・変更・削除されるたびに、DBMSは本体のテーブルだけでなく、インデックス側のデータ構造(B-Treeの並び順)も自動で並び替えて再構築しなければなりません。そのため、更新処理のパフォーマンスは低下します。
2. 保存容量の消費:インデックスは別途作成されるデータであるため、ディスク容量やメモリ空間を消費します。すべての列にインデックスを貼ると、データベース全体のサイズが非常に大きくなってしまいます。
3. 適切に設計しないと効かない:曖昧な検索(前方一致以外のLIKE検索)や、カーディナリティ(値のバリエーション)が低い列(「性別」など値が2つしかないもの)にインデックスを設定しても、検索の効率は上がらず、逆に遅くなる原因となります。

このため、実務においては検索の頻度や更新の頻度を考慮し、最も効果的な列に対してのみ慎重にインデックスを配置する設計が求められます。

試験でのポイント

IT試験においては、インデックスの目的、検索速度向上のメリットと更新速度低下のデメリットについて問われることが多いです。

試験対策としての重要ポイント: ・検索(SELECT文)の高速化:膨大なデータの中から、特定のキーを持つデータを素早く探索するためにインデックス(索引)を設定します。 ・更新処理(INSERT/UPDATE)への悪影響:インデックスを設定すると、検索は速くなりますが、「追加や更新、削除の処理時間は長くなる(オーバーヘッドが発生する)」というデメリットを必ず覚えておきましょう。 ・インデックスの効果的な適用先:カーディナリティ(選択度)が高い列(値の種類が多く、検索時に絞り込みやすい列)に適用するのが効果的である点。例えば、「社員番号」や「電話番号」は適していますが、「性別」や「有無フラグ」のような列は不適当です。

「データベースにおけるインデックスの効果として、適切なものはどれか」という選択肢で、「検索処理は高速化されるが、更新処理は遅くなる」や「一意性が高く検索頻度の高い列に設定する」といった正答を選べるように整理しておきましょう。

関連する用語

インデックスを適用して高速検索を行う「関係データベース(RDB)」や、最も代表的な構造である「B-Tree(B木)」が関連します。また、インデックスを使用せず全行を走査する「フルスキャン」や、インデックスを貼る基準となる列のデータ多様性を示す「カーディナリティ(選択度)」も重要な関連ワードです。

読んだ内容を10問練習と実技で確認

記事で理解した用語を、StudyQuestの演習とクラウド実技ラボで定着させます。

10問練習 実技ラボ