「Accessのクエリが遅くなった」「テーブルのレコード数が増えるほど検索に時間がかかる」——こうした問題を根本から解消するのがインデックス(Index)の設定です。適切なフィールドにインデックスを付加するだけで、数万件以上のデータでも体感できるほどクエリ速度が改善します。
Accessのインデックスは、主キーには自動で設定されますが、結合や絞り込みに頻繁に使うフィールドには手動で追加する必要があります。設定場所はデザインビューのフィールドプロパティとインデックスダイアログの2種類があり、複合インデックス(複数フィールドをまとめたインデックス)も作成できます。
本記事では、インデックスの仕組みと種類、フィールドプロパティとインデックスダイアログの操作手順、複合インデックスの作り方、設定すべきフィールドの見極め方、そしてMOS Access試験の出題ポイントまでを体系的に解説します。
Accessのインデックスとは何か
インデックスとは、テーブル内の特定フィールドに付ける検索用の目次です。書籍の索引をイメージすると分かりやすく、「キーワード→ページ番号」の対応表があれば本文を全ページ読まずに目的箇所へ飛べます。Accessも同様に、インデックスがあれば全レコードをスキャンせずに目的のレコードへ直接ジャンプできます。
インデックスがないフィールドへの絞り込みはテーブルスキャンと呼ばれ、レコード数に比例して時間がかかります。1,000件では気にならなくても、10万件・100万件規模になると数秒~数十秒の遅延が生じます。インデックスを付けると検索時間がほぼ一定になり、大量データでも高速に処理できます。
主キーは自動でインデックスが付く
Accessでテーブルを新規作成すると、主キーに設定したフィールドには自動的に一意のインデックス(重複なし)が付与されます。主キーは各レコードを一意に識別するためのフィールドなので、重複が許されず、インデックスにより高速アクセスが保証されます。
デザインビューでフィールドを選択したとき、フィールドプロパティ欄の「インデックス」が「はい(重複なし)」になっていれば、そのフィールドはインデックス済みです。主キーのフィールドは金色の鍵アイコンが表示されます。
インデックスの種類と違い
Accessのインデックスには3種類あります。目的に応じて使い分けることが重要です。
| 種類 | フィールドプロパティの値 | 重複 | 主な用途 |
|---|---|---|---|
| インデックスなし | いいえ | ― | 検索に使わないフィールド(メモ・画像など) |
| 通常インデックス | はい(重複あり) | 許可 | 外部キー・担当者ID・カテゴリコードなど重複が発生するフィールド |
| 一意インデックス | はい(重複なし) | 禁止 | 主キー以外でも重複を禁止したいフィールド(メールアドレス・社員番号など) |
複合インデックスは単一フィールドではなく複数のフィールドを組み合わせて1つのインデックスを作る方法で、「都道府県+市区町村」や「姓+名」のように2フィールドを同時に使った検索を高速化できます。フィールドプロパティからは設定できず、インデックスダイアログを使います。
インデックスの設定方法①:フィールドプロパティ
単一フィールドへのインデックス追加は、デザインビューのフィールドプロパティから最も手軽に設定できます。
設定手順
- ナビゲーションウィンドウでテーブルを右クリックし、「デザインビュー」を選択する
- インデックスを付けたいフィールド名の行をクリックして選択する(行全体が青くなる)
- 画面下半分の「フィールドプロパティ」エリアで「インデックス」の欄を確認する
- ドロップダウンを開いて「はい(重複あり)」または「はい(重複なし)」を選択する
- 上書き保存(Ctrl+S)して変更を確定する
保存時に「既存のデータが一意制約に違反しています」というエラーが出た場合、すでにそのフィールドに重複値が存在します。「はい(重複なし)」ではなく「はい(重複あり)」に変更するか、事前に重複データを修正してください。
フィールドプロパティで確認できるインデックス状況
| 表示値 | 意味 | 変更可否 |
|---|---|---|
| いいえ | インデックスなし | 変更可 |
| はい(重複あり) | 通常インデックス | 変更可 |
| はい(重複なし) | 一意インデックス(主キー含む) | 変更可 |
| (グレーアウト) | 主キー(変更・削除は主キー操作で行う) | 要注意 |
インデックスの設定方法②:インデックスダイアログ
テーブルに設定されているすべてのインデックスを一覧表示し、追加・削除・複合インデックスの作成ができるのがインデックスダイアログです。デザインビューのリボン「テーブルデザイン」→「インデックス」ボタンから開きます。
インデックスダイアログの開き方
- テーブルをデザインビューで開く
- リボン「テーブルデザイン」タブの「表示/非表示」グループにある「インデックス」ボタンをクリックする
- インデックスダイアログが別ウィンドウで表示される
ダイアログには「インデックス名」「フィールド名」「並べ替え順序」の3列と、下部に「主キー」「一意」「NULL値無視」のプロパティが表示されます。
インデックスダイアログの見方
| 列・プロパティ | 内容 |
|---|---|
| インデックス名 | インデックスの識別名。主キーは「PrimaryKey」が既定 |
| フィールド名 | インデックス対象のフィールド |
| 並べ替え順序 | 昇順(ASC)または降順(DESC) |
| 主キー | 「はい」にすると主キーとして設定される |
| 一意 | 「はい」にすると重複値が禁止される(一意インデックス) |
| NULL値無視 | 「はい」にするとNULL値のレコードをインデックスから除外する |
新しいインデックスをダイアログから追加する
- インデックスダイアログを開く
- 空白行の「インデックス名」列に任意の名前を入力する(例:
idx_CustomerCode) - 「フィールド名」列のドロップダウンからインデックスを付けるフィールドを選択する
- 「並べ替え順序」列で「昇順」または「降順」を選ぶ
- 下部の「一意」を「はい」にすると重複禁止の一意インデックスになる
- ダイアログを閉じてデザインビューを保存する
複合インデックス(複数フィールド)の作成手順
「姓と名を組み合わせて検索する」「都道府県と市区町村を同時に絞り込む」といった場合、2フィールド以上をまとめた複合インデックスを作成すると検索が高速化されます。複合インデックスはインデックスダイアログでのみ設定できます。
複合インデックスの作成手順(例:都道府県+市区町村)
- インデックスダイアログを開く
- 新しい行の「インデックス名」列に名前を入力する(例:
idx_Region) - 同じ行の「フィールド名」で1つ目のフィールドを選択する(例:都道府県)
- 次の行の「インデックス名」列は空白のままにする(同じインデックスの続きを意味する)
- その行の「フィールド名」で2つ目のフィールドを選択する(例:市区町村)
- ダイアログを閉じてデザインビューを保存する
ポイント:複合インデックスは左端のフィールド(最初に指定したフィールド)から順に効果を発揮します。「都道府県のみ」での検索は高速になりますが、「市区町村のみ」での検索には複合インデックスは使われません。左端のフィールドを必ず含む検索パターンに対して有効な手法です。
インデックスを設定すべきフィールドの見極め方
インデックスは多ければよいというものではありません。インデックスを追加するほどデータの追加・更新・削除が遅くなり、ファイルサイズも増えます。設定のメリットとデメリットを理解したうえで適切に運用することが重要です。
インデックスを付けるべきフィールド
- クエリのWHERE句で頻繁に使うフィールド(例:受注日、ステータス、顧客ID)
- テーブル結合(JOIN)に使う外部キーフィールド(例:顧客テーブルの顧客IDを受注テーブルで参照する場合)
- ORDER BY句で並べ替えるフィールド(例:売上日付、優先度)
- 重複を禁止したい一意値フィールド(例:メールアドレス、社員番号)
インデックスを付けなくてよいフィールド
- メモ型・OLEオブジェクト型フィールド(Accessはこれらにインデックスを付けられない)
- 検索にほとんど使わないフィールド(備考・コメント欄など)
- 値の種類が極端に少ないフィールド(性別・フラグなど2~3種類のみ)
- 追加・更新が非常に頻繁なフィールド(インデックス維持コストが検索メリットを上回る)
実務別インデックス設計パターン5選
パターン1:顧客コードに一意インデックスで重複登録を防ぐ
顧客マスタの「顧客コード」フィールドは、主キーの「ID(オートナンバー)」とは別に一意であるべき業務キーです。フィールドプロパティの「インデックス」を「はい(重複なし)」に設定するだけで、同じ顧客コードの二重登録がデータベースレベルで防止されます。
主キーと業務キーを分けることで、顧客コードの採番ルールが変わっても主キー(ID)への影響がなく、リレーションシップを安定させられます。
パターン2:外部キーに通常インデックスで結合クエリを高速化
受注テーブルに「顧客ID」フィールドがある場合、このフィールドは顧客マスタとの結合キーです。外部キーフィールドにインデックスを付けると、顧客マスタと受注テーブルを結合するクエリの実行速度が大幅に向上します。
設定は「はい(重複あり)」で構いません。1人の顧客が複数回注文するため、顧客IDには当然重複が発生します。Accessのリレーションシップを設定した際に外部キーフィールドに自動でインデックスが付く場合もありますが、デザインビューで確認して手動で追加することを推奨します。
パターン3:日付フィールドに通常インデックスで期間絞り込みを高速化
「今月の受注一覧を取得する」「特定の日付範囲で売上を集計する」といったクエリでは、受注日フィールドへのインデックスが効果的です。WHERE句にBetween [開始日] And [終了日]のような条件を使う場合も、日付フィールドにインデックスがあれば対象範囲のレコードを素早く絞り込めます。
毎日大量の受注データが蓄積するテーブルほど効果が大きく、数万件規模のテーブルでクエリが遅い場合にまず確認すべき設定です。
パターン4:都道府県+市区町村で複合インデックスを作成
顧客マスタで「都道府県で絞り込んだうえ市区町村でさらに絞り込む」ような検索が頻繁に発生する場合、都道府県と市区町村の複合インデックスが有効です。
インデックスダイアログで左端(1つ目)に「都道府県」、2行目(インデックス名は空白)に「市区町村」を設定します。「都道府県+市区町村」の組み合わせ検索はもちろん、「都道府県のみ」の検索にも複合インデックスが使われます。一方「市区町村のみ」の検索には使われないため、市区町村単独でも頻繁に検索するなら別途単独インデックスも追加します。
パターン5:既存テーブルの主キー・インデックスを棚卸しする
運用が長くなったAccessデータベースでは、不要なインデックスが増加している場合や、本来付けるべきフィールドに設定が抜けている場合があります。インデックスダイアログを開いてすべてのインデックスを一覧確認し、次のチェックを実施します。
- 主キー(PrimaryKey)が1つだけ設定されているかを確認する
- 外部キーフィールドすべてにインデックスがあるかを確認する
- 検索・フィルタに全く使わないフィールドにインデックスがないかを確認して削除する
- インデックスが10個以上あるテーブルはインデックスの増えすぎを疑い、更新パフォーマンスを確認する
インデックスを削除する手順
不要になったインデックスはインデックスダイアログから削除できます。
- デザインビューでテーブルを開き、インデックスダイアログを起動する
- 削除したいインデックスの行をクリックして選択する(行の左端グレー部分をクリック)
- Deleteキーを押して行を削除する
- 複合インデックスの場合は、インデックス名が同じ複数行をすべて選択して削除する
- ダイアログを閉じてデザインビューを保存する
注意:主キーのインデックス(PrimaryKey)は通常の方法では削除できません。主キー設定を解除してからインデックスを削除する必要があります。主キーを誤って削除するとリレーションシップが壊れる可能性があるため、慎重に操作してください。
インデックス設定でよくあるトラブルと対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| 「一意インデックス制約違反」エラーが出る | 既に重複値が存在するフィールドに「重複なし」インデックスを付けようとしている | 重複データを先に削除・修正してから設定する |
| インデックスを増やしたら更新が遅くなった | インデックスの数が多すぎる(更新のたびにインデックス再構築が発生) | 使っていないインデックスを削除し、必要最小限に絞る |
| 複合インデックスがクエリに使われない | WHERE句が複合インデックスの先頭フィールドを含んでいない | クエリの条件を見直すか、単独インデックスを追加する |
| インデックスダイアログボタンがグレーアウト | テーブルがデータシートビューになっている | テーブルをデザインビューで開き直す |
| 保存時に「テーブルがロックされています」と表示される | 他のユーザーやフォームが同じテーブルを開いている | 関連するフォーム・クエリをすべて閉じてから再度保存する |
MOS Access試験でのインデックス出題ポイント
MOS Access 365試験では、インデックスの操作は「テーブルの管理」スキル領域に含まれます。試験では実際にデータベースを操作して指定のインデックスを設定する形式が出題されます。
- フィールドプロパティでのインデックス設定:デザインビューで指定フィールドのインデックスを「はい(重複あり)」または「はい(重複なし)」に変更できる
- インデックスダイアログの操作:「テーブルデザイン」リボン→「インデックス」ボタンからダイアログを開き、インデックスの追加・削除ができる
- 主キーとインデックスの関係:主キーには自動的に一意のインデックスが設定されることを理解している
- 重複あり・重複なしの使い分け:業務要件に応じて適切な種類を選択できる
MOS試験 インデックス操作チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| デザインビューを開ける | テーブルを右クリック→デザインビューを選択できる | ★☆☆ |
| フィールドプロパティでインデックスを設定 | 対象フィールドを選択し「インデックス」ドロップダウンを変更できる | ★☆☆ |
| 一意インデックスと通常インデックスを区別 | 「重複あり」と「重複なし」の使い分けを理解している | ★★☆ |
| インデックスダイアログを開ける | リボン「テーブルデザイン」→「インデックス」ボタンを押せる | ★★☆ |
| インデックスダイアログで追加できる | インデックス名・フィールド名・並べ替え順序を設定して新規インデックスを作成できる | ★★☆ |
| 複合インデックスを作成できる | インデックス名を同じにして2行目以降にフィールドを追加できる | ★★★ |
| インデックスを削除できる | インデックスダイアログで行を選択してDeleteキーで削除できる | ★★☆ |
まとめ:インデックス設定でAccessのパフォーマンスを根本から改善する
本記事のポイントをまとめます。
- インデックスとは:テーブルの検索用目次。設定すると大量データでもクエリが高速になる
- 3種類の違い:インデックスなし・通常(重複あり)・一意(重複なし)。業務要件に合わせて選択する
- 設定方法は2つ:単一フィールドはデザインビューのフィールドプロパティ、複合インデックスはインデックスダイアログで設定する
- 付けるべきフィールド:WHERE句・結合(外部キー)・ORDER BYに頻繁に使うフィールド。メモ型・値の種類が極端に少ないフィールドには不要
- 複合インデックス:左端フィールドから効果を発揮する。先頭フィールドを含む検索パターンに有効
- MOS試験では:フィールドプロパティとインデックスダイアログの2経路を把握し、重複あり・なしを使い分けられるようにする
インデックスはAccessデータベースの「見えないパフォーマンス基盤」です。クエリが遅いと感じたときにまず確認すべき設定であり、適切に管理することで数万件規模のデータでも快適な操作感を維持できます。MOS試験の合格に向けても、デザインビューを開いてフィールドプロパティを確認する習慣を身につけておきましょう。
PR
MOS試験シリーズの定番対策書。Access・Excel・Wordを含むMicrosoft 365全体の試験合格を目指す方に、出題範囲の網羅的な理解と模擬問題での実践演習が一冊でそろいます。試験日が決まったら手元に置いておきたい一冊です。
PR
改善Excel パフォーマンスを底上げする仕事改善・効率化テクニック
ExcelからAccessへの連携・データ管理の効率化手法を含む業務改善テクニックを体系的に解説。インデックス設計の考え方にも通じるデータ設計の基礎が身につき、Office全体のパフォーマンス向上を狙う実務者に適した一冊です。
