応用情報22年秋 午前 問31

【中分類】
データベース−4. トランザクション処理−(4)データベースの性能向上

【問題を解く前に】

今回は省略。すぐに解き方に・・・

【解き方】

(ア)について
 たとえば、データが10個しかないというようなことがあります。

 例;アマチュア無線コールサインの真ん中の数字0〜9までの10個

 このようなとき、インデックスを貼っても、あんまり効果ないです。
 なんたって、10件ですから(というか、DBに入れるのも、意味ないんですけどね。ファイルで保存、メモリ読み込みで十分)。

 ということで、レコード数も考慮したほうがよさそうです。

 適切です。

(イ)について
 インデックスは、検索性能は向上しますが、更新・削除・追加処理の性能は、一般的に劣化します。

 なぜなら、検索のときは、インデックスしか見なくていいかもしれません。
 この場合、性能は向上します。

 しかし、更新・削除・追加処理では、インデックスを作成したことによって、作成したインデックス分、更新・削除・追加処理をしないといけません。この時間分、性能は劣化します。

まちがい

(ウ)について

 一般論としては、必要ありません。

 すべての列に対してインデックスをつけると、上記のように、更新・削除・追加処理で性能が劣化し、最悪、バッチ業務が、おわらなくなる(夜間バッチが突き抜ける)危険性があります。
 そこで、検索上、(頻繁に使われるなどで)必要なものだけ、インデックスをつけます。

 なお、佐藤正美先生に教わった人は「これ、正解じゃないの?」と思うかもしれません。しかし、それは、一般的な解釈ではありません。後で書きます。

結局、まちがい


(エ)について

 一般的に、まちがいです。

 2値しか持たない場合、インデックスは、同じ値のレコードがたくさんになってしまいます。できるだけ、値が散ってくれることによって、早く調べられるようにしているのがインデックスなので、インデックスの意味なくなっちゃいます。

 ただし、Oracleを使っている人。このような場合は、ビットマップインデックスを貼ると思います。そして、ビットマップインデックスは、たしかに設定したほうがよくて、検索は早くなると思います。

・・・しかし・・・

 情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。

 ビットマップインデックスは、Oracleには入っていますが、すべてのデータベースに入っているわけではありません(入ってないほうが、多いんじゃないかな・・・?)なので、それは、正解にはなりません。

結局、まちがい

 
【答え】
(ア)

【解き終わって】

 佐藤正美先生のT字型ER手法において、Viewを禁止し、全てをインデックスで処理しようという考え方(=ウ)は、(イ)での指摘どおり、検索では絶大な効果を発揮しますが、更新・追加・削除処理では、パフォーマンスが落ちます。
 その結果、夜間バッチが突き抜けてしまう危険があります(検索のパフォーマンスが落ちるより、こっちのほうが最悪)

 現在はそのため、Oracleでは、いろいろなインデックス手法が使われているはずです・・・が、それを紹介するのは避けます。

 なぜなら、このブログは、情報処理試験のブログだからです。
 情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。
 Oracleの手法を紹介して、そちらを覚えられてしまっては困るからです。
 また、同様の理由で、佐藤正美先生の手法も試験に出ることはありません。

 なお、小論文の場合ですが、特定の手法、商品を説明なしに書いてはいけないことは、たしかです。しかし、説明した上で書いた場合は・・・どうなんでしょう?
 私は書いたことがないので、わかりません。


【受験テクニック】
情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。
特定の商品にしか通用しない場合は、たいてい、正解ではありません。
小論文の場合でも、特定の手法、商品を説明なしに書いてはいけない(実は、Windows とかは・・・はっきりしない)