【はっしゅいんでっくす】
ハッシュインデックス とは?
💡 住所録いらずの一発検索、でも「あ行の人全員」は苦手です
📌 このページのポイント
ハッシュインデックスって、B-Treeインデックスと何が違うの?
B-Treeが「辞書みたいに順番に並べて探す」のに対して、ハッシュインデックスは「計算で一発で場所を特定する」方式だよ。電話帳で名前を順番に探すのと、部屋番号が分かっていて直接ドアをノックするのの違いだね
一発で見つかるなら最強じゃない?
完全一致検索だけなら確かに最速クラスだよ。でも「価格が1000円以上3000円以下の商品」みたいな範囲検索ができないのが致命的な弱点なんだ。ハッシュ値には元の値の大小関係が残らないから、順番に並べて探すことができないんだよ
じゃあどんなときに使うの?
セッションIDやトークンでユーザーを検索するとか、一意のキーで完全一致検索する場面だね。PostgreSQLにもハッシュインデックスがあるし、Memcachedのようなキーバリューストアは内部的にハッシュテーブルそのものだよ
ハッシュ衝突って聞いたことあるけど、問題にならないの?
最近のデータベースだとあまり使われないの?
まとめ:ざっくりこれだけ覚えればOK!
ハッシュインデックスって出てきたら「ハッシュ関数で一発検索、ただし範囲検索は無理」と思えればだいたいOK!
📖 おまけ:英語の意味
「Hash Index」 = ハッシュ索引
💬 Hash(細かく刻む)から来ていて、キーを関数で変換して格納場所を決めるイメージだよ