Was ist der Unterschied zwischen Btree- und Rtree-Indizierung?

36

Bei MySQLWorkbench ist mir aufgefallen, dass Sie auswählen können, wie Ihre Indizes gespeichert werden sollen, bevor Sie Ihr Design weiterentwickeln. Die Speichertypen sind:

  1. BTREE
  2. RTREE
  3. HASH

Als ich dies untersuchte, fand ich einige Informationen, die so ziemlich über meinem Kopf lagen. Daher suche ich nach praktischen Informationen darüber, was der Unterschied zwischen diesen ist und / oder warum Sie sich für eine andere entscheiden sollten.

Außerdem habe ich noch nie einen Speichertyp ausgewählt. Daher gehe ich davon aus, dass MySQL einen Standardspeichertyp auswählt (BTREE?).


quelle

Antworten:

51

BTree

BTree (tatsächlich B * Tree) ist eine effiziente geordnete Schlüsselwertzuordnung. Bedeutung:

  • Mit dem Schlüssel kann ein BTree-Index schnell einen Datensatz finden.
  • Ein BTree kann der Reihe nach gescannt werden.
  • Es ist auch einfach, alle Schlüssel (und Datensätze) innerhalb eines Bereichs abzurufen.

zB "alle Ereignisse zwischen 9 und 17 Uhr", "Nachnamen beginnend mit 'R'"

RTree

RTree ist ein, spatial indexwas bedeutet, dass es schnell closeWerte in zwei oder mehr Dimensionen identifizieren kann . Es wird in geografischen Datenbanken für Abfragen wie die folgenden verwendet:

alle Punkte innerhalb von X Metern von (x, y)

Hash

Hash ist eine ungeordnete Schlüsselwertzuordnung. Es ist noch effizienter als ein BTree: O(1)statt O(log n).

Da es jedoch kein Konzept für die Reihenfolge hat, kann es nicht für Sortiervorgänge oder zum Abrufen von Bereichen verwendet werden.

Als Randnotiz erlaubte MySQL ursprünglich nur Hash-Indizes für MEMORYTabellen; Ich bin mir aber nicht sicher, ob sich das im Laufe der Jahre geändert hat.

Javier
quelle
Unterstützt MySQL Rtrees?
Pacerier
2
ja, sie heißen SPATIAL INDEX ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier
Cool, danke =) Gibt es neben diesen 3 noch andere Strukturen oder geplante Strukturen in naher Zukunft?
Pacerier
Speichertabellen unterstützen auch Btree-Indizes
Amareswar
@Amareswar, richtig. Vielleicht kann meine Antwort in beide Richtungen gelesen werden, aber ich meinte, dass HASH-Indizes nur für MEMORY-Tabellen zulässig sind, nicht für 'normale' Tabellen.
Javier