it-swarm-eu.dev

Was ist der Unterschied zwischen btree- und rtree-Indizierung?

Ich habe auf MySQLWorkbench festgestellt, 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 recherchierte, fand ich einige Informationen, die mir ziemlich über den Kopf gingen, und suche daher 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?).

37
user25791

BTree

BTree (in der Tat B * Tree) ist eine effizient geordnete Schlüsselwertkarte. 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.

z. B. "alle Ereignisse zwischen 9 und 17 Uhr", "Nachnamen, die mit 'R' beginnen"

RTree

RTree ist ein spatial index, Was bedeutet, dass es schnell close -Werte in zwei oder mehr Dimensionen identifizieren kann. Es wird in geografischen Datenbanken für Abfragen verwendet wie:

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

Hash

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

Da es jedoch kein Ordnungskonzept gibt, kann es nicht zum Sortieren oder Abrufen von Bereichen verwendet werden.

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

53
Javier