【応用情報】令和6年度秋期(午後:問6 データベース)第3回 - インデックス
今回も、令和6年度秋期応用情報技術者試験の午後問6「データベース」 について解説します。
前回の続きとなっておりますので、まだご覧になられていない場合はまずこちらからどうぞ。
【応用情報】令和6年度秋期(午後:問6 データベース)第1回 - ER図
【応用情報】令和6年度秋期(午後:問6 データベース)第2回 - SQL
この記事は、下記の方々を対象としております。
- 応用情報技術者試験を受験する、且つ午後にデータベースを選択する。
- データベーススペシャリスト試験を受験するが、応用情報レベルから復習したい。
- 開発エンジニアでデータモデリングやDB関連の設計を担当する、もしくは目指している。
試験問題の構成や難易度、SQLやインデックス設計のポイントを全3回に分けてご紹介しています。
- 第1回:設問1(ER図 - 自己結合、連関エンティティ)
- 第2回:設問2(SQL - 再帰的クエリ)
- 第3回(今回):設問3(インデックス設計)
設問3:インデックスの特性と適用箇所の選択
※出典:令和6年度 秋期 応用情報技術者試験 午後 問題冊子
選択問題です(※選択肢は後述)
まず、問われている①と関係する部分を確認します。
設問3-(1):インデックスの特性(複数選択)
選択肢は7つあり、この中から適切な3つを選びます。
尚、今回はあくまで『試験対策』としての解説なので、詳細な仕様説明は省略します。
特に、計算量の式などは実務で使う場面はかなり限定されると、個人的には考えております。
選択肢『オ』と『カ』が、まさにそれです。参考書などで覚える必要があります。
まずは『オ』が正解の1つとなります。
残り2つは、インデックスの仕組みを理解することで、設問から正解を導けます。
データベースやSQLにあまり慣れていない方でもイメージしやすいよう、辞典を例にして説明します。
たとえば、国語辞典を使って『たまご』を調べるとします。
その際、まずは索引から『あかさたな・・・』で『た』のあたりをパッと開くのではないでしょうか?
そのあとで、『た』の範囲から、さらに『あかさたな・・・』で『ま』を探し、最後に『たまご』を見つける。
データベースではテーブルの索引がインデックスです。
そして、どの項目にインデックスを付けると、探しやすいのか?が重要になります。
また、インデックスが効果を発揮するのは下記の2点が大きなポイントになります。
- 検索する際の条件は、範囲が絞られていること
- インデックスを設定する項目の値が、なるべく偏らないこと
上記のポイントを踏まえて、残りの選択肢を見てみましょう。
選択肢『ア』:AND演算子とNOT演算子
SQL実行時の検索条件をANDで絞った場合と、NOTで『それ以外』とした場合の比較です。
複数項目をANDで絞ると、データの対象範囲は狭まるので探しやすくなります。
単体・複数に限らずNOTで『それ以外』にすると、探す範囲が広くなり非効率になります。
(辞書で『た』以外から探す、つまり『あかさ・なはまらやわ』を探すことになる)
『ア』の説明は正しいです。
選択肢『イ』:演算・型変換
インデックスを設定した項目で検索する際に、演算や型変換をするようです。
高速化はできません。インデックスが使用されないことも考えられます。
辞書の例で極端に言えば、『た』を探すのに『ta』で探すようなものです。
『イ』の説明は誤りです。
選択肢『ウ』:値の偏り
インデックスを設定した項目の値に偏りがなければ、性能が安定・・・つまり検索時間にばらつきがないか?
辞書でイメージしてみましょう。
もし、ほとんどのページが『た』行だったら・・・?
『た』行のページは多く『たまご』を探すのに時間がかかります。
そして、『は』行のページが少なければ『はがき』はすぐ見つかります。
という具合に、検索時間にばらつきがあるのは『安定していない』と考えるのが妥当です。
逆に言えば、ばらつきがなければ『安定している』ということになります。
『ウ』の説明は正しいです。
選択肢『エ』:カーディナリティ(多重度)
カーディナリティが低い列にインデックスを設定すると、検索は速いか?
たとえば『内容が同じで、索引が違う2つの辞書(1000ページ)』があるとします。
一方は、索引が五十音『あかさたなはまやらわ』の10種類です。
もう一方は、索引が『食べられるもの、食べられないもの』の2種類です。
※索引ごとにページ数は均等であるものとします。
『たまご』を調べるとして、
前者では、まず『あかさたなはまやらわ』行から『た』行を特定します。
この時点で、候補は10分の1である100ページに絞られます。
後者では、まず『たまご』は食品と考えて『食べられるもの』を特定します。
この時点で、候補は2分の1である500ページに絞られます。
さて、ここから『たまご』を探す場合
100ページから探すのと、500ページから探すのは、どちらが楽でしょうか?
探しもので索引を使うなら、その種類は多い方が良いということになります。
つまり、カーディナリティが高い列にインデックスを設定すると、検索は速くなります。
『エ』の説明は誤りです。
選択肢『キ』:等号演算子と範囲指定
検索条件に等号演算子『=』を使えば速いが、範囲指定『BETWEEN』を使うと遅いか?
確かに、等号演算子『=』は対象を限定するので速くなることは容易に想像できます。
範囲指定『BETWEEN』も範囲を限定しているので、同様に速くなるはずです。
『キ』の説明は誤りです。
設問3-(1):まとめ
各選択肢から分かることをまとめました。
- NOT演算(否定条件)を含む検索はインデックスによる高速化ができない。
- インデックス対象の列に対して演算や型変換を行うと、インデックスの効果が出ない恐れがある。
- 検索値が均等に分布しているほどインデックスの効果は安定する。
- 範囲指定(BETWEENなど)による検索はインデックスを有効に活用できる。
今回は、技術ではなく辞書のイメージで説明しましたが、現場でインデックスを触ることがあれば『つまり、どういう意味なのか?』というような確認に役立つと思います!
設問3-(2):インデックスを付けるべき項目の選定
上記でご紹介した知識を使って、どのテーブルのどの項目にインデックスを付けると効果的なのか?を考える問題です。
設問にある「主キーには自動でインデックスが付与されている」という点を忘れず、重複して回答しないようにしなければいけません。
この問題は、表だけでなく前回解説したSQLも必要です。
解説すると凄い長文になるため、今回は解説を割愛します。
YouTubeでは解説しておりますので、もしご興味がございましたら参考にしてみてください。
設問3-(1)のポイントを意識すれば、ある程度のあたりは付けられます。
応用編だと思って、ぜひ挑戦して欲しいです!
まとめ(令和6年度秋期)
令和6年度秋期応用情報技術者試験のデータベース問題は、リカーシブクエリーや複雑なリレーション設計、インデックスの特性理解まで幅広い知識が問われました。
特にSQLのWITH RECURSIVE句の使い方やLIKE句でのワイルドカード連結、そしてインデックスの適用判断は今後の試験対策に不可欠なポイントです。
今回の解説を通じて、問題文の読み解き方やSQL構文の細かい部分、インデックス設計の考え方が理解できたと思います。
過去問を繰り返し解く際には、今回のポイントを意識して取り組むことで、点数アップにつながるでしょう。
ここまでお付き合い頂き、ありがとうございましたm(_ _)m
Discussion