0

BTREE インデックスと HASH インデックスのどちらを使用するかについて議論していました。

理論的には、HASH インデックスを使用する利点は何ですか?
それらをいつ選択する必要がありますか。さらに重要なのは、その理由です。

ハッシュ インデックスはポイント クエリに適していると読みましたが、なぜですか?

BTREE インデックスが範囲クエリに最適であることは既にわかっています。これは、リーフ ノードを左から右に簡単にトラバースできるためです。

4

1 に答える 1

0

特定の DBMS について言及していないため、この回答はかなり一般的です。

適切に機能するハッシュ インデックスは、1 回のフェッチでポイント クエリに対する回答に到達する必要があります。B-Tree は lg_B(n) セカンダリ ストレージ アクセスのようなものを使用します。ここで、B はおおよその分岐係数で、n はエントリ数です。キャッシングと適切なノード サイズにより、数回のフェッチに抑えられる可能性がありますが、ハッシュ インデックスの場合は 2 倍になります。さらに、各 B ツリー アクセスには、各ノードのサブインデックスをトラバースするために、それに関連付けられた重要な計算があります (ノードごとの lg_2(B) データ比較操作のようなもの)。通常、ハッシュ インデックスの計算時間は非常に限られています (ハッシュ計算と少数のデータ比較操作 (できれば 1 回))。各ノード内での検索の計算時間は、B ツリー ベースのインデックスの場合、多くの場合重要です。

ピッキングに関しては、次の場合にハッシュ インデックスを使用します。

  • ポイントクエリのみを期待します
  • システムハッシュ関数のパフォーマンスが悪いケースにデータが分類されるとは思わない(奇妙なケースですが、言及する必要があると思いました)

何らかの種類の範囲クエリがある場合、および/または事前に決定可能な一連の列で並べ替えられた結果が必要な場合は、B-Tree ファミリーの方が適しています。

于 2013-03-10T06:56:24.587 に答える