ITパスポート 2018年 春期 問86
問題文
DBMSにおけるインデックスに関する記述として、適切なものはどれか。
選択肢
ア:検索を高速に行う目的で、必要に応じて設定し、利用する情報(正解)
イ:互いに関連したり依存したりする複数の処理を一つにまとめた、一体不可分の処理単位
ウ:二つの表の間の参照整合性制約
エ:レコードを一意に識別するためのフィールド
🔒 解説は解答すると表示されます
DBMSにおけるインデックスに関する記述【ITパスポート 解説】
正解の理由
DBMS(Database Management System:データベース管理システム)での「インデックス」は、データ検索を高速にするための仕組みです。つまり索引のような「目次」に当たります。選択肢の中で、検索を高速に行う目的で必要に応じて設定・利用する情報、という説明がこれに該当します。ここでは正しい選択肢を ア とします。インデックスは検索を速くしますが、その分作成や更新のコスト(追加の記憶領域と更新処理)がかかるため、必要に応じて設定します。これが、選択肢アが適切な理由です。
(補足)「インデックス」は一般に B-tree(バランス木)やハッシュといったデータ構造で実装されます。英語は index で、書籍の巻末索引をイメージすると分かりやすいです。
解法ステップ
- 問題文のキーワード「インデックス」「DBMS」に注目する。
- DBMS は Database Management System:データベース管理システム。
- 各選択肢の要点を短く読み取る。
- 検索を高速にする → インデックスの説明っぽい。
- 一体不可分の処理単位 → トランザクション(transaction:取引・処理のまとまり)。
- 参照整合性制約 → 外部キー(foreign key:別の表を参照するキー)。
- レコードを一意に識別するフィールド → 主キー(primary key:一意に識別する列)。
- 当てはめて、インデックスの説明に一致する選択肢を選ぶ。
このように、用語の意味を一つずつ当てはめて消去法で正解を導けます。
選択肢別の誤答解説
-
ア: 検索を高速に行う目的で、必要に応じて設定し、利用する情報
- 正解です。インデックスは検索(SELECT)を速くするための追加データ構造です。更新時には維持のコストが発生します。
-
イ: 互いに関連したり依存したりする複数の処理を一つにまとめた、一体不可分の処理単位
- これは「トランザクション(transaction:複数処理をまとめて扱う単位)」の説明です。ロールバックやコミットといった概念と結び付きます。インデックスとは異なります。
-
ウ: 二つの表の間の参照整合性制約
- これは「参照整合性(referential integrity)」や「外部キー(foreign key:他の表を参照するキー)」に関する説明です。別表との関係性の制約であり、インデックス自体の定義ではありません。
-
エ: レコードを一意に識別するためのフィールド
- これは「主キー(primary key:レコードを一意に識別する列)」の説明です。主キーはしばしば自動的にインデックスを作ることがありますが、主キーそのものは「識別するためのフィールド」であって、インデックスという説明とは異なります。
よくある誤解
-
「インデックスを作ればすべての処理が速くなる」
- 誤りです。検索(SELECT)は速くなることが多いですが、INSERT/UPDATE/DELETEではインデックスの更新負荷が増え、処理が遅くなることがあります。利用頻度と用途を考慮して作る必要があります。
-
「主キーとインデックスは同じもの」
- よく混同されますが別物です。主キーは「一意に識別する列」です。多くのDBMSでは主キーに対して自動的にインデックスが作られますが、主キーそのものはルールであり、インデックスは検索性能を上げる仕組みです。
-
「すべての列にインデックスを付ければ安心」
- 無駄なインデックスはストレージを消費し、更新時のコストを増やします。頻繁に検索条件で使う列や結合に使う列を優先します。
補足コラム
-
インデックスの種類(簡単に)
- B-tree(Balanced tree:平衡二分木)型インデックス:範囲検索や順序が重要な検索で有効。多くの汎用DBMSで標準的に使われます。
- ハッシュ型インデックス:等価検索(=検索)に速い。ただし範囲検索には不向き。
- クラスタ化(clustered)と非クラスタ化(non-clustered):クラスタ化はテーブルの物理的な並びをインデックスに合わせる方式で、読み取り性能に影響します(DBMSにより用語や実装は異なります)。
-
実際のSQL例(インデックス作成)
-- 単純なインデックス作成(例)
CREATE INDEX idx_users_email ON users (email);
-- 主キーを定義すると多くのDBMSは自動でインデックスを作成する
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255)
);
- 運用のポイント
- 検索が遅いクエリを特定して、そのクエリで使う列にインデックスを検討する。
- 更新頻度の高い列には不要なインデックスを付けない。
- インデックスは万能ではないので、実際の性能測定(EXPLAINなど)で効果を確認する。
FAQ
Q1: どの列にインデックスを付ければよいですか?
A1: WHERE句やJOIN句、ORDER BYで頻繁に使う列を優先します。アクセス頻度と更新頻度のバランスで決めます。
A1: WHERE句やJOIN句、ORDER BYで頻繁に使う列を優先します。アクセス頻度と更新頻度のバランスで決めます。
Q2: インデックスは自動で作られますか?
A2: 主キーやユニーク制約を定義すると、多くのDBMSは自動でインデックスを作成します。その他は手動でCREATE INDEXします。
A2: 主キーやユニーク制約を定義すると、多くのDBMSは自動でインデックスを作成します。その他は手動でCREATE INDEXします。
Q3: インデックスはどれくらい速くする?
A3: データ量やクエリの種類によります。小さなテーブルでは効果が小さいこともあります。大きなテーブルの検索では大きな効果が出ることが多いです。
A3: データ量やクエリの種類によります。小さなテーブルでは効果が小さいこともあります。大きなテーブルの検索では大きな効果が出ることが多いです。
Q4: 複数列にまたがる検索はどうしますか?
A4: 複合インデックス(複数列をまとめたインデックス)を使うことがあります。ただし列の順序や検索パターンに注意が必要です。
A4: 複合インデックス(複数列をまとめたインデックス)を使うことがあります。ただし列の順序や検索パターンに注意が必要です。
関連キーワード: DBMS、インデックス、検索高速化、主キー、外部キー、トランザクション、B-tree、ハッシュインデックス、CREATE INDEX、SQL、クエリ最適化

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

