HOME»応用情報技術者試験掲示板»平成29年春期 午前問28 NULL以外の検索につ
投稿する
平成29年春期 午前問28 NULL以外の検索につ [0832]
Oracleハナコさん(No.1)
選択肢 ウ(範囲検索)か エ(NULL以外の検索)かで迷い、エを選び間違いました。
管理人さんの解説には「NULLの検索には効果を発揮しない」とありますが、問題文はNULL以外の検索です。
オラクルではNULL以外の検索時は索引データをすべて返すので、索引を使うことがあります。
ウもエも索引は使われると思うのですが、答えがウである理由は何でしょう?
NULL以外の検索の場合、返されるデータ数が多いので、索引を使っても使わなくてもパフォーマンスの改善は大して期待できない、ということでしょうか?
範囲検索で3つのデータを探すときは、確かに、全件検索よりは索引を使った方が速くなりますね。
そういう理解で良いのか、どなたか詳しい方がいらしたら教えてください。
管理人さんの解説には「NULLの検索には効果を発揮しない」とありますが、問題文はNULL以外の検索です。
オラクルではNULL以外の検索時は索引データをすべて返すので、索引を使うことがあります。
ウもエも索引は使われると思うのですが、答えがウである理由は何でしょう?
NULL以外の検索の場合、返されるデータ数が多いので、索引を使っても使わなくてもパフォーマンスの改善は大して期待できない、ということでしょうか?
範囲検索で3つのデータを探すときは、確かに、全件検索よりは索引を使った方が速くなりますね。
そういう理解で良いのか、どなたか詳しい方がいらしたら教えてください。
2017.10.01 11:16
29年秋期受験者さん(No.2)
この投稿は投稿者により削除されました。(2017.10.01 13:17)
2017.10.01 13:17
29年秋期受験者さん(No.3)
この問題は、解釈が難しいかもしれませんね。
間違っているかもしれませんが。
NULLのデータ以外
仮にデータが、10,000があり NULLデータが2件とします。
B木インデックスなしの場合、10,000読み9,998件のデータを取得。
B木インデックスありの場合、枝を辿っていき NULL以外に到達したら
そこから最後までのデータを取得。
検索の性能改善は小さいということだと思います。
コードの範囲選択(4001~4003)
B木インデックスなしの場合、全件検索し4001~4003のデータ取得。
B木インデックスありの場合、枝を辿っていき4001に到達したら
そこから3件のデータを取得。
検索の性能改善は大きいということだと思います。
確かオラクルの索引は、B木インデックスだと思います。
間違っているかもしれませんが。
NULLのデータ以外
仮にデータが、10,000があり NULLデータが2件とします。
B木インデックスなしの場合、10,000読み9,998件のデータを取得。
B木インデックスありの場合、枝を辿っていき NULL以外に到達したら
そこから最後までのデータを取得。
検索の性能改善は小さいということだと思います。
コードの範囲選択(4001~4003)
B木インデックスなしの場合、全件検索し4001~4003のデータ取得。
B木インデックスありの場合、枝を辿っていき4001に到達したら
そこから3件のデータを取得。
検索の性能改善は大きいということだと思います。
確かオラクルの索引は、B木インデックスだと思います。
2017.10.01 13:25
Oracleハナコさん(No.4)
29年秋期受験者さん ありがとうございます。
やはりそういうことですよね。
B木インデックスにはNULLは格納されませんが、そのため、IS NOT NULL の検索では索引データすべてが対象となるので、判定する必要がなくパフォーマンスが良いと思ったのですが、それは間違いですね。
問題文にも「少量のNULLが格納」とあるので、仮に索引を使ったとしても全件検索とパフォーマンスはさほど変わらないということですね。
そのように考えて納得することにします。ありがとうございました。
やはりそういうことですよね。
B木インデックスにはNULLは格納されませんが、そのため、IS NOT NULL の検索では索引データすべてが対象となるので、判定する必要がなくパフォーマンスが良いと思ったのですが、それは間違いですね。
問題文にも「少量のNULLが格納」とあるので、仮に索引を使ったとしても全件検索とパフォーマンスはさほど変わらないということですね。
そのように考えて納得することにします。ありがとうございました。
2017.10.01 14:37