基本情報 平成24年度 春期 問27:テクノロジ系に関する問題
関係データベースの表の列に利用者がインデックスを設定する目的はどれか。
- a外部キーの列の値を別の表の主キーの値に一致させる。
- bデータの格納位置への効率的なアクセスが可能となり, 検索速度の向上が期待で きる。正答
- c一つの大きなテーブルを複数のディスクに分散格納する場合, ディスク容量が節 約できる。
- d列内に重複する値がないようにする。 ー1
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
インデックス(索引)は本の巻末にある「索引ページ」と同じで、「あの言葉はどこ?」を素早く探せるようにする仕組み。データベースでも、よく検索する列にインデックスを作ると検索が一気に速くなります。
👉 覚え方:インデックス=検索を速くする索引。
ほかの選択肢:a 外部キー=表同士の関連付け/c ディスク分散は別の仕組み(パーティショニング)/d 重複防止は一意制約(UNIQUE)。
なぜこれが正解か
正解は b。インデックス(索引)は関係データベースのテーブル列に対して作成され、データの格納位置への効率的なアクセス経路を提供する補助データ構造。検索(SELECT文のWHERE句)のフルテーブルスキャンを回避し、O(log n)程度で対象行に到達できるため検索速度が大幅に向上する。
各選択肢の解説
- a:外部キーは別表の主キーを参照する制約で、整合性確保用。インデックスの目的とは異なる。
- c:ディスク容量の節約はパーティショニング・圧縮・正規化等の目的で、インデックスは逆に容量を追加消費する。
- d:列内の重複防止は一意制約(UNIQUE制約)。一意インデックスとセットになることもあるが、本来の役割は別。
覚え方・ひっかけ注意
インデックス=検索高速化+容量増加+更新コスト増のトレードオフ。検索は速くなるが、INSERT/UPDATE/DELETE時にはインデックス自体の更新も必要なため書込みは遅くなる。書込み多い表ではインデックスを絞る設計が定石。
理論的背景
インデックスの代表的なデータ構造はB木(B-tree)/B+木(B+tree)で、ディスクI/Oを最小化するためバランス木として設計される。B+木は葉ノードのみキー値とポインタを保持し、葉同士を連結リストでつなぐため範囲検索(BETWEEN・>・<)に強い。ハッシュインデックスは等価検索に特化し範囲検索に弱い。Bitmap索引は低カーディナリティ列(性別・状態フラグ等)に有効。
実務での使われ方
RDBMSはオプティマイザがインデックスの使用可否をコスト計算で判断する(CBO: Cost-Based Optimization)。EXPLAIN/EXPLAIN PLAN・EXPLAIN ANALYZEで実行計画を確認し、フルスキャン・インデックススキャン・ネステッドループ結合・ハッシュ結合・マージ結合等の選択を最適化する。複合インデックス(マルチカラム)の先頭列以外でのスキャン制約、カバリングインデックス(必要列を全て含み表アクセス不要)、関数インデックス、部分インデックス等の高度技法も実務で頻用。
試験での位置づけ
基本情報・応用情報のデータベース分野で必出。インデックスの目的・効果・副作用、B木/B+木の構造、SQLの実行計画、正規化(第1〜第5正規形・BCNF)と非正規化のトレードオフが出題される。データベーススペシャリスト試験ではクエリチューニング・テーブル設計・パーティショニング・分散DB設計が深掘りされる。
選択肢の発展補足
外部キー(参照整合性制約)は更新時のチェックコストがあるためインデックスとセットで設計するのが定石。一意インデックス(UNIQUE INDEX)は一意制約と機能的に重複し、多くの RDBMSでは UNIQUE 制約定義時に自動でインデックスが作成される。主キーは暗黙にクラスタ化インデックス(MySQL InnoDB)または非クラスタ化インデックス(SQL Server)になる。NoSQLでもMongoDBのBツリーインデックス、DynamoDBのGSI(Global Secondary Index)など似たメカニズムが提供される。インデックスの過剰作成は更新性能・ディスク容量・統計情報メンテナンスの負荷増になるため、業務に必要な検索パターンを洗い出してから設計するのがDBA(データベース管理者)の腕の見せどころ。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成24年度 春期 問27/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。