btreeとrtreeのインデックス作成の違いは何ですか?


36

MySQLWorkbenchで、デザインをフォワードエンジニアリングする前にインデックスを保存する方法を選択できることに気付きました。ストレージタイプは次のとおりです。

  1. BTREE
  2. RTREE
  3. ハッシュ

これを調査して、頭上にある情報を見つけたので、これらの違いや、なぜ選択する必要があるのか​​、あるいはその両方に関する実用的な情報を探しています。

また、ストレージタイプを選択したことがないため、MySQLがデフォルトのストレージタイプ(BTREE?)を選択していると思います。

回答:


51

BTree

BTree(実際にはB * Tree)は、効率的な順序付けされたキー値マップです。意味:

  • キーが与えられると、BTreeインデックスはレコードをすばやく見つけることができます。
  • BTreeは順番にスキャンできます。
  • 範囲内のすべてのキー(およびレコード)をフェッチするのも簡単です。

例:「午前9時から午後5時までのすべてのイベント」、「「R」で始まる姓」

RTree

RTreeは、2つ以上のディメンションの値をspatial indexすばやく識別できることを意味しcloseます。次のようなクエリの地理データベースで使用されます。

(x、y)からXメートル以内のすべてのポイント

ハッシュ

ハッシュは順序付けられていないキーと値のマップです。BTree:よりもさらに効率的O(1)ですO(log n)

ただし、順序の概念はないため、ソート操作や範囲のフェッチには使用できません。

サイドノートとして、元々、MySQLはMEMORYテーブルのハッシュインデックスのみを許可していました。しかし、それが長年にわたって変更されたかどうかはわかりません。


MySQLはRtreeをサポートしていますか?
12

2
はい、それらは空間インデックス(と呼ばれているdev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
ハビエル・

かっこいい、ありがとう=)これらの3以外の構造、または近い将来に計画された構造はありますか?
12

メモリテーブルは、同様にbtreeインデックスをサポート
Amareswar

@Amareswar、そうです。私の答えは両方の方法で読むことができるかもしれませんが、私が意味したのは、HASHインデックスはMEMORYテーブルでのみ許可され、「通常の」テーブルでは許可されなかったことです。
ハビエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.