Qual è la differenza tra indicizzazione btree e rtree?


36

Ho notato su MySQLWorkbench che puoi scegliere come memorizzare i tuoi indici prima di progettare in anticipo il tuo design. I tipi di archiviazione sono:

  1. BTREE
  2. R-tree
  3. HASH

Facendo ricerche su questo, ho trovato alcune informazioni che erano praticamente al di sopra della mia testa, quindi sto cercando informazioni pratiche su quale sia la differenza tra questi e / o perché dovresti scegliere uno rispetto all'altro.

Inoltre, non ho mai scelto un tipo di archiviazione prima, quindi presumo che MySQL stia scegliendo un tipo di archiviazione predefinito (BTREE?)

Risposte:


51

BTree

BTree (in effetti B * Tree) è una mappa valori-chiave ordinata efficiente. Significato:

  • data la chiave, un indice BTree può trovare rapidamente un record,
  • un BTree può essere scansionato in ordine.
  • è anche facile recuperare tutte le chiavi (e i record) in un intervallo.

ad es. "tutti gli eventi tra le 9:00 e le 17:00", "cognomi che iniziano con 'R'"

R-tree

RTree è un spatial indexche significa che può identificare rapidamente closevalori in 2 o più dimensioni. Viene utilizzato nei database geografici per query come:

tutti i punti entro X metri da (x, y)

hash

Hash è una mappa di valori-chiave non ordinata. È persino più efficiente di un BTree: O(1)invece di O(log n).

Ma non ha alcun concetto di ordine, quindi non può essere utilizzato per operazioni di ordinamento o per recuperare intervalli.

Come nota a margine, in origine MySQL consentiva solo gli indici hash sulle MEMORYtabelle; ma non sono sicuro che sia cambiato nel corso degli anni.


MySQL supporta Rtrees?
Pacerier,

2
si, si chiamano INDICE SPAZIALE ( dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html )
Javier

Bene, grazie =) Ci sono altre strutture oltre a queste 3 o strutture pianificate nel prossimo futuro?
Pacerier,

Le tabelle di memoria supportano anche gli indici
btree

@Amareswar, giusto. Forse la mia risposta può essere letta in entrambi i modi, ma intendevo dire che gli indici HASH erano consentiti solo su tabelle MEMORY, non su tabelle "normali".
Javier,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.