インデックスの
- BTREE
- HASH
の違いについて調べたことざっくりメモ。
分かりやすいように例で説明する。
- 例えば1~20までの数字が入った箱が20個あるとする。
- 箱の中身は開けてみるまで分からない。
- そんなとき、16が入った箱を当てるにはどうすればいいか?なるべく時間をかけずに。
BTREEなら以下のようにする。
- 事前に以下のようなツリーを作る
- 上から順番に16が
- 9より小さいか?
- 9より大きくて18より小さいか?
- 18より大きいか?
のどれに当てはまるか見ていく。それが終わったら次の階層で- 12より小さいか?
- 12より大きくて15より小さいか?
- 15より大きいか?
のどれに当てはまるか見ていく。
・・・みたいなやり方をするのがBTREE。
HASHなら以下のようにする。
- 事前に箱の中身の数字をハッシュ化して、箱の外側にハッシュ化した数値を書いておく
- 「ハッシュ化する」と書くとややこしいので、箱の中身の数字を2倍した数字を書いておくということにする
- なので16の箱には32と書いておく
- 16を探す場合は、まず16を2倍する。
- すると答えは32なので32と書いてある箱を探す。(外に番号が書いてあるのですぐに探せる。)
このようにHASHだと「どれと一致するか」しか探せないので、一致検索しかできない。
まとめ
違い | BTREE | HASH |
---|---|---|
検索のスピードは? | ツリー状にデータを検索していく →データによって時間に差がある |
どんなデータでも「これだ!」と一発で探せる =一定時間で探せる |
一致 (=)検索ができるか? | ○ | ○ |
大小比較 (<, <=, >, >=)検索ができるか? | ○ | × |
不一致 (!=, <>)検索ができるか? | ○ | × |
おわり
参考にしたページ:
http://www.intellilink.co.jp/article/column/oss-postgres02.html
コメント