基礎インデックスの種類

ハッシュインデックス

定義

ハッシュインデックスとは、キーの値をハッシュ関数で変換し、対応するバケットに格納・参照することでO(1)相当で等価検索を行うインデックス方式である。

キーをハッシュ値に変換してバケットに配る

ハッシュインデックスの仕組みはシンプルです。キーをハッシュ関数に通して固定サイズの数値に変換し、そのバケットに格納する。 探すときも同じ関数でバケットを特定して、そこだけを見れば済みます。 件数が増えても平均O(1)で目的にたどり着けるのが強みです。

ハッシュインデックスの動き
計算の流れ

「1ステップ」で入力からバケット到達までを順に追う。「自動再生」で連続再生。

1. 入力を受け取る
2. ハッシュ関数を通す
3. 5 で割った余りを取る
4. バケット3 を線形探索
バケット 0衝突: 2件を線形探索
yamada (2,1)kobayashi (2,2)
バケット 1
kato (3,2)
バケット 2衝突: 3件を線形探索
tanaka (1,1)ito (1,3)watanabe (2,3)
バケット 3衝突: 3件を線形探索
suzuki (1,2)nakamura (2,0)takahashi (3,0)
バケット 4衝突: 2件を線形探索
sato (1,0)saito (3,1)
バケット内の各エントリは キー → 行ID の組。 「1ステップ」で入力からバケット到達までの流れを順に追う。

ハッシュインデックスの弱点

  • 範囲検索ができない: ハッシュ値は元の値の大小関係を保存しないため、WHERE id BETWEEN 10 AND 20のような検索は不可能。
  • ソートに使えない: ORDER BYを高速化する用途にも使えない。
  • 複合条件が組みにくい: 一部のカラムだけでの検索や先頭一致は不可。

使うべき場面

セッションストアのキャッシュキー引き、ユニークIDでの等価検索、インメモリDB。 逆に一般的な業務テーブルの主インデックスとしてはB-treeが選ばれることがほとんどです。

よくある疑問

Q.ハッシュインデックスがB-treeより速いのに使われる場面が少ないのはなぜ?
A.範囲検索・並び替え・複合的な条件に対応できないためです。用途が「主キーやユニーク値の等価検索」に限られます。
Q.ハッシュ衝突が起きるとどうなりますか?
A.同じバケットに複数のキーが入り、線形探索やチェーンで解決します。衝突が多いと性能が落ちるため、ハッシュ関数と負荷率の設計が重要です。

関連トピック

もっと学びたい方へ(おすすめ書籍)

本セクションはAmazonアソシエイトのリンクを含みます。購入いただくと運営者に紹介料が入る場合があります。

オンライン個別指導

もっと深くDBを学びたい方へ。

たいてっくが、SQL・データベース設計・パフォーマンスチューニング・ IPAデータベーススペシャリスト対策まで、1対1で学習をサポートします。まずは無料相談から。

無料相談を予約する →