web-dev-qa-db-ja.com

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

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

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

これを調査したところ、かなり頭の痛い情報がいくつか見つかりました。そのため、これらの違いは何か、および/または何を選択する必要があるのか​​についての実用的な情報を探しています。

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

37
user25791

BTree

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

  • キーを指定すると、BTreeインデックスはレコードをすばやく検索でき、
  • bTreeは順番にスキャンできます。
  • また、範囲内のすべてのキー(およびレコード)を簡単にフェッチすることもできます。

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

RTree

RTreeは_spatial index_です。つまり、2次元以上のclose値をすばやく識別できます。これは地理データベースで次のようなクエリに使用されます。

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

ハッシュ

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

ただし、順序の概念がないため、並べ替え操作や範囲のフェッチには使用できません。

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

53
Javier