Jaka jest różnica między indeksowaniem btree i rtree?

36

Zauważyłem na MySQLWorkbench, że możesz wybrać sposób przechowywania swoich indeksów, zanim opracujesz projekt. Rodzaje przechowywania to:

  1. BTREE
  2. RTREE
  3. HASZYSZ

Badając to, znalazłem pewne informacje, które były prawie nad moją głową, więc szukam praktycznych informacji na temat różnicy między nimi i / lub dlaczego powinieneś wybierać między sobą.

Ponadto nigdy wcześniej nie wybrałem typu pamięci, więc zakładam, że MySQL wybiera domyślny typ pamięci (BTREE?)


źródło

Odpowiedzi:

51

BTree

BTree (w rzeczywistości B * Tree) jest wydajną uporządkowaną mapą klucz-wartość. Znaczenie:

  • biorąc pod uwagę klucz, indeks BTree może szybko znaleźć rekord,
  • BTree można skanować po kolei.
  • łatwo jest również pobrać wszystkie klucze (i rekordy) z danego zakresu.

np. „wszystkie wydarzenia między 9:00 a 17:00”, „nazwiska zaczynające się na„ R ””

RTree

RTree spatial indexoznacza, że ​​może szybko zidentyfikować closewartości w 2 lub więcej wymiarach. Jest używany w geograficznych bazach danych do zapytań takich jak:

wszystkie punkty w promieniu X metrów od (x, y)

Haszysz

Hash to nieuporządkowana mapa klucz-wartość. Jest nawet bardziej wydajny niż BTree: O(1)zamiast O(log n).

Ale nie ma żadnej koncepcji porządku, więc nie można jej używać do operacji sortowania ani do pobierania zakresów.

Na marginesie, początkowo MySQL dopuszczał indeksy Hash tylko w MEMORYtabelach; ale nie jestem pewien, czy to się zmieniło przez lata.

Javier
źródło
Czy MySQL obsługuje Rtrees?
Pacerier
2
tak, nazywają się INDEKSEM PRZESTRZENNYM ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier
Fajnie, dziękuję =) Czy są inne struktury oprócz tych 3 lub planowane struktury w najbliższej przyszłości?
Pacerier,
Tabele pamięci obsługują również indeksy btree
Amareswar
@Amareswar, prawda. Być może moją odpowiedź można odczytać na dwa sposoby, ale miałem na myśli to, że indeksy HASH były dozwolone tylko w tabelach MEMORY, a nie w „normalnych” tabelach.
Javier