web-dev-qa-db-fra.com

Mysql utilise-t-il l'arbre B, l'arbre B + ou les deux?

J'ai fait quelques recherches sur la question et j'ai découvert que Mysql utilise l'index B + Tree, mais lorsque je lance "show index", le type d'index que j'obtiens est Btree. Et j'ai trouvé dans ce article que Mysql utilise à la fois l'arbre Btree et B +. S'il est vrai qu'il utilise les deux; pourquoi est-il nommé Btree sans mentionner l'arbre B +, auquel cas chacun est utilisé. Je connais la différence entre les deux, et je veux faire quelques requêtes pour comprendre la différence de performance entre les index B-tree et B + tree. Ce qui m'amène à ma deuxième question, y a-t-il une grande différence entre les deux dans l'exécution de certaines requêtes, si oui, veuillez donner un exemple. Merci d'avance.

5
Noussa Smiley

InnoDB utilise des index B + Tree, pas B-Tree. Tous les détails sur les structures de données InnoDB peuvent être trouvés ici . Vous pouvez également regarder ces diagrammes . L'auteur des deux ressources, Jeremy Cole, était le chef de l'équipe MySQL chez Google.

Pourquoi la syntaxe BTREE au lieu de B+TREE? Cette question devrait être posée à un ingénieur MySQL ou MariaDB, mais je vois au moins deux raisons possibles:

  • B + TREE serait un très mauvais mot clé, car il contient +, qui est généralement un opérateur.
  • Cette syntaxe est plus ancienne que InnoDB. Il est probablement aussi ancien que le moteur de stockage ISAM, qui n'existe plus. Il est très possible que B-TREE ait été utilisé à cette époque.

Pourquoi la documentation indique-t-elle qu'InnoDB utilise B-Tree? Eh bien, tous les utilisateurs de MySQL ne sont pas censés savoir ce qu'est l'arbre B +. Cela peut être une simplification excessive, mais dans ce contexte, il me semble acceptable.

Vous avez écrit que vous connaissez la différence entre B-Tree et B + Tree. Que les différentes caractéristiques de performance doivent être claires:

  • B + Tree est plus rapide pour le tri;
  • B-Tree est plus rapide lorsque vous insérez des valeurs au milieu.

Mais en général, B + Tree est considéré comme supérieur. Combien? Je ne sais pas, mais sûrement pas des ordres de grandeur.

7
Federico Razzoli

UNE B+Tree est un juste un arbre de recherche binaire, comme un B-Tree, où,

  • Les feuilles (seaux) ont des liens vers les seaux droit et gauche des frères et sœurs), faisant de l'arbre un index en liste chaînée . En général, chaque compartiment est dimensionné pour être lu sur un disque.
  • Les données ne sont stockées que dans la feuille.

UNE B-Tree for reference stocke les données dans les nœuds et les feuilles, et n'a aucun lien de ce type car l'analyse nécessite un retour en arrière.

L'idée d'un B+Tree est de maximiser la taille de lecture pour les recherches de disque. Il est peu probable qu'une base de données qui implémente un B+Tree voudrais utiliser B-Tree, sauf s'ils ne sont intéressés que par les recherches d'index et non par les scans d'index. Les frais généraux du lien ne sont pas importants. Sans oublier, dans la méthode de B+ l'arbre donne naissance à n'importe quel modèle de concurrence, voir Lehman et Yao .

Il est important que toutes ces différences soient de simples optimisations sur la même idée. Par exemple, le document de Lehman et Yao ci-dessus fait référence à B-Trees dans l'abstrait, puis à tort (à mon humble avis), dit: "nous considérons une variante simple du B-tree (en fait de l'arbre B *, proposé par Wedekind) ". C'est bizarre, parce que je pense que Wedekind a proposé un arbre B +.

Ces termes prêtent à confusion. Découvrez ceci "L'arbre B omniprésent" publié en 1979 si vous voulez vraiment un gaspillage par jour,

Peut-être le terme le plus mal utilisé dans la littérature de B-Tree est le B * -Tree.

1
Evan Carroll