MySQLインデックスはいつhashを使いますか

1174 ワード

MySQLインデックスは面接でよく聞かれる知識点ですが、よく使われる2つのインデックス方法はHashとB+Treeがあります.ツリーの構造はまたお話しします.今日はHashを受け取ります.
なぜhashを使うのか
Hashインデックスは、データのhash値に基づいてインデックスデータの格納位置に直接位置決めすることができ、配列の下付き文字を知ってから下付き文字に基づいてデータを取りに行くことに相当し、この効率は最高と言える.hashを使用するのはそのためである.
hash対応ストレージエンジン
現在hashをサポートするエンジンにはMEMORY(ここではグーグルが必要)があり、他のエンジンはそれぞれの方法でhash方法をサポートしています.InnoDBに適応hashアルゴリズムがあるように,内部実装はBT方式を採用しているが,BTインデックスのインデックスと理解できる.
InnoDBでhashインデックスがサポートするオン/オフ
hashインデックスは非常に高速ですが、InnoDBでは確かにサポートされていません.また、インデックスの具体的な作成はエンジンで決定され(作成後はメモリに存在します)、DBAでは制御できないので、hashサポートをオフにしてBTを使用してもパフォーマンスの要件を満たすことができます.
set global innodb_adaptive_hash_index=off/on
hashの使用シーン
hash使用シーン比較限界
  • hashインデックスは、'='、'<=>'、および'in'操作にのみ適用されるため、hashは正確な検索にのみ適用される.
  • は、hash後のデータが元のデータのように秩序を保つことはないため、クエリー・ソートには適用されません.
  • は、ファジイクエリには適用されません.つまり、likeキーは使用できません.
  • ソートがサポートされていない以上、範囲クエリーもサポートされていません.
  • hash競合の解決
    hashのアルゴリズムがどんなに正確であっても、データ量が大きいとhash衝突が発生する可能性があり、hash衝突を解決する方法はたくさんあります.例えば、hash、チェーンテーブルの重ね合わせなど、MySQLはチェーンテーブルの重ね合わせ、つまりHashMapのようにhash衝突を解決する方法を採用しています.したがって、hash衝突が多すぎる場合、hashインデックスを使用するとクエリーのパフォーマンスに影響します.