応用情報22年秋 午前 問31
【中分類】
データベース−4. トランザクション処理−(4)データベースの性能向上
【問題を解く前に】
今回は省略。すぐに解き方に・・・
【解き方】
(ア)について
たとえば、データが10個しかないというようなことがあります。
例;アマチュア無線のコールサインの真ん中の数字0〜9までの10個
このようなとき、インデックスを貼っても、あんまり効果ないです。
なんたって、10件ですから(というか、DBに入れるのも、意味ないんですけどね。ファイルで保存、メモリ読み込みで十分)。
ということで、レコード数も考慮したほうがよさそうです。
適切です。
(イ)について
インデックスは、検索性能は向上しますが、更新・削除・追加処理の性能は、一般的に劣化します。
なぜなら、検索のときは、インデックスしか見なくていいかもしれません。
この場合、性能は向上します。
しかし、更新・削除・追加処理では、インデックスを作成したことによって、作成したインデックス分、更新・削除・追加処理をしないといけません。この時間分、性能は劣化します。
まちがい
(ウ)について
一般論としては、必要ありません。
すべての列に対してインデックスをつけると、上記のように、更新・削除・追加処理で性能が劣化し、最悪、バッチ業務が、おわらなくなる(夜間バッチが突き抜ける)危険性があります。
そこで、検索上、(頻繁に使われるなどで)必要なものだけ、インデックスをつけます。
なお、佐藤正美先生に教わった人は「これ、正解じゃないの?」と思うかもしれません。しかし、それは、一般的な解釈ではありません。後で書きます。
結局、まちがい
(エ)について
一般的に、まちがいです。
2値しか持たない場合、インデックスは、同じ値のレコードがたくさんになってしまいます。できるだけ、値が散ってくれることによって、早く調べられるようにしているのがインデックスなので、インデックスの意味なくなっちゃいます。
ただし、Oracleを使っている人。このような場合は、ビットマップインデックスを貼ると思います。そして、ビットマップインデックスは、たしかに設定したほうがよくて、検索は早くなると思います。
・・・しかし・・・
情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。
ビットマップインデックスは、Oracleには入っていますが、すべてのデータベースに入っているわけではありません(入ってないほうが、多いんじゃないかな・・・?)なので、それは、正解にはなりません。
結局、まちがい
【答え】
(ア)
【解き終わって】
佐藤正美先生のT字型ER手法において、Viewを禁止し、全てをインデックスで処理しようという考え方(=ウ)は、(イ)での指摘どおり、検索では絶大な効果を発揮しますが、更新・追加・削除処理では、パフォーマンスが落ちます。
その結果、夜間バッチが突き抜けてしまう危険があります(検索のパフォーマンスが落ちるより、こっちのほうが最悪)
現在はそのため、Oracleでは、いろいろなインデックス手法が使われているはずです・・・が、それを紹介するのは避けます。
なぜなら、このブログは、情報処理試験のブログだからです。
情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。
Oracleの手法を紹介して、そちらを覚えられてしまっては困るからです。
また、同様の理由で、佐藤正美先生の手法も試験に出ることはありません。
なお、小論文の場合ですが、特定の手法、商品を説明なしに書いてはいけないことは、たしかです。しかし、説明した上で書いた場合は・・・どうなんでしょう?
私は書いたことがないので、わかりません。
【受験テクニック】
情報処理試験は、特定の手法、商品にしか通用しない方法を排除しています。
特定の商品にしか通用しない場合は、たいてい、正解ではありません。
小論文の場合でも、特定の手法、商品を説明なしに書いてはいけない(実は、Windows とかは・・・はっきりしない)