Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ハッシュインデックス | クエリ最適化.インデックス
SQL最適化とクエリ機能

ハッシュインデックス

メニューを表示するにはスワイプしてください

特定の状況では、情報を効率的に検索するためにインデックスが必要ですが、B-treeインデックスを使用すると複雑すぎたり冗長になる場合があります。このような場合、ハッシュインデックスがより適した選択肢となります。

ハッシュインデックスは、ハッシュ関数を使用してインデックス化された値をハッシュテーブル内の位置にマッピングするデータベースインデックスの一種です。
このインデックスタイプでは、対象カラムの値がハッシュ化され、固定サイズの値またはハッシュコードに変換されます。このハッシュコードがインデックスとして使用され、データ行を取得します。

仕組み

ハッシュインデックスでは、ハッシュ処理によってインデックスキーの値がハッシュ関数でハッシュコードに変換されます。このハッシュコードを使用して、対応するデータがインデックス内のどの場所(バケット)に格納されているかが決定されます。

図書館の目録システムで、各書籍タイトルがISBN(国際標準図書番号)でインデックス化されている場合のハッシュインデックスを考えます。

この例では、ハッシュ関数を利用して書籍のISBNを0x7FA4のような16進数のハッシュコードに変換します。これはISBNの数字に対して一連の数学的操作を行うことで得られます。
このハッシュコードは一意の識別子として機能し、ハッシュテーブル内のスロットを決定します。そのスロットには、該当する書籍のすべての情報が格納されたテーブルの行へのリンクがあります。

主な特徴

  1. 高速な検索: ハッシュインデックスは等価比較に対して高速な検索を提供。特定の値を検索する際、PostgreSQLはその値のハッシュを計算し、インデックス内の対応する位置に直接アクセスするため、データの取得が非常に効率的;

  2. 限定的な演算子サポート: B-treeインデックスとは異なり、ハッシュインデックスは等価比較(=)のみをサポートし、範囲クエリ(<, >, <=, >=)やソートには対応していない。この制限により、ハッシュインデックスはB-treeインデックスと比べて汎用性が低い;

  3. 特定用途での高速性: ワークロードが大量の等価検索を含む場合、例えば主キーや一意制約の強制などでは、ハッシュインデックスはB-treeインデックスよりも高いパフォーマンスを発揮することがある。ただし、範囲クエリやハッシュアルゴリズムに適合しないデータでは、その利点は小さくなる。

実装

SQLでハッシュインデックスを実装するには、以下の文を使用:

CREATE INDEX hash_index_name ON table_name USING HASH (column_name1, column_name2,... );

この結果、column_name1, column_name2,... の値がハッシュ化され、ハッシュテーブルが作成される。これにより、必要なデータ行の高速な取得が可能となる。

question mark

ハッシュインデックスの利用で最も恩恵を受けるクエリの種類はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  4

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  4
some-alt