[0136] インデックス

平成12年度秋期 初級システムアドミニストレータ試験より
最近、関係データベースを利用して作成した顧客管理データベースの検索に時間がかかるようになってきた。調査したところ、テーブルのレコード数が当初の数倍に増加していることと、検索のたびに検索対象テーブルのすべてのレコードにアクセスしていることが分かった。このデータベースの検索時間を改善するために、最も有効な対策はどれか。
関係データベースソフトを再インストールする。
検索条件に応じたインデックスを検索対象テーブルに追加する。
データベースのインデックスエリアを拡張する。
データベースを格納するサーバのハードディスクを増設する。

正解

解説

 データベースのインデックスに関する問題です。

 ほとんどのリレーショナルデータベースでは、検索速度を向上させるために、インデックスと呼ばれる仕組みをもっています。その名のとおり、インデックスとは索引のことです。

 例えば、私たちが、ある本から特定の語句を調べようとするとき、その本の頭から一字一句読みながら語句を探すのではなく、巻末にある「語句索引」を使って、該当するページ開き、その中から、目的の語句を得ようとします。データベースであれば、この語句索引がインデックスに相当します。

 インデックスのデータ構造は、データレコードのデータ構造と異なり、ツリー構造であったり、ハッシュ構造であったりします。データベース製品によってサポートされているインデックスの構造は様々なものがありますが、ツリー構造が一般的です。

 インデックスを使用するためには、インデックスを作成したい表とその項目に対して、CREATE INDEX文を事前に発行しておく必要があります。こうすることで、インデックスが定義された表にレコードの追加や削除、更新があった場合は、自動的にインデックスも更新されるようになります。また、レコードがすでに存在している場合であっても、インデックスをまとめて作成することも可能です。



 当然ながら、SELECT文を発行する際に、インデックスを作成していなかった場合は、データレコードを全件アクセスするしなければならないので、検索スピードは、ほとんどのケースで遅くなります。

 また、インデックスを作成していても、WHERE句で指定されている条件がインデックスに含まれていない場合は、結局、レコード全件にアクセスしないと正しい検索が行えなくなってしまうので、インデックスの設計は、検索処理の仕様を吟味してから行なわなければなりません。先程の語句索引の例でいうと、語句索引には、代表的な一般名詞をだけにするのか、固有名詞を含めるのか、年代など数詞も含めるのか、あるいはそれは年表として別途作成するのか、といったところが設計の勘所となります。


 それでは、選択枝をみていきましょう。


 関係データベースソフトを再インストールする。
レコードやインデックスの再作成で、データのフラグメンテーションが解消し、検索時間が短縮される場合がありますが、データベースソフトの再インストールでは、改善はできません。

 検索条件に応じたインデックスを検索対象テーブルに追加する。
正しい記述です。

 データベースのインデックスエリアを拡張する。
インデックスの格納領域を拡張することで改善されるケースもありますが、それ以前に、レコード全件アクセスへの対処が必要です。

 データベースを格納するサーバのハードディスクを増設する。
ディスクを増設すると、I/O負荷が分散するので検索時間を短縮できる可能性がありますが、それ以前に、レコード全件アクセスへの対処が必要です。

 よって、イが正解となります。
※ 解説の内容は執筆時点のものであり,含まれている情報の正確性,妥当性について保証するものではありません。ご注意ください・・・

関連する(かもしれない)問題