web-dev-qa-db-fra.com

Quelle est la différence entre l'indexation btree et rtree?

J'ai remarqué sur MySQLWorkbench que vous pouvez choisir comment stocker vos index avant de procéder à l'ingénierie de votre conception. Les types de stockage sont:

  1. BTREE
  2. RTREE
  3. HACHER

En recherchant cela, j'ai trouvé des informations qui me dépassaient, alors je cherche des informations pratiques sur la différence entre celles-ci et/ou pourquoi vous devriez choisir l'une plutôt qu'une autre.

De plus, je n'ai jamais choisi de type de stockage auparavant, donc je suppose que MySQL choisit un type de stockage par défaut (BTREE?)

37
user25791

BTree

BTree (en fait B * Tree) est une carte clé-valeur ordonnée efficace. Sens:

  • étant donné la clé, un index BTree peut trouver rapidement un enregistrement,
  • un BTree peut être numérisé dans l'ordre.
  • il est également facile de récupérer toutes les clés (et enregistrements) dans une plage.

ex. "tous les événements entre 9h et 17h", "noms commençant par 'R'"

RTree

RTree est un spatial index Ce qui signifie qu'il peut identifier rapidement les valeurs de close en 2 dimensions ou plus. Il est utilisé dans les bases de données géographiques pour des requêtes telles que:

tous les points à moins de X mètres de (x, y)

Hacher

Hash est une carte de valeurs-clés non ordonnée. Il est encore plus efficace qu'un BTree: O(1) au lieu de O(log n).

Mais il n'a aucun concept d'ordre, il ne peut donc pas être utilisé pour des opérations de tri ou pour récupérer des plages.

En remarque, à l'origine, MySQL n'autorisait que les index Hash sur les tables MEMORY; mais je ne sais pas si cela a changé au fil des ans.

53
Javier