comment B-arbre d'indexation des œuvres dans mysql
Quand je créer un index pour une table dans mysql, je vois que le index_type est de type BTREE
. Maintenant, même si je comprends que sur arbre(s), je ne suis pas tranquille, de comprendre comment il stocke l'index et comment les recherches de base de données les enregistrements sur cette base.
Je veux dire, btree est excellent pour les bases de données pour effectuer la lecture et l'écrit de grands blocs de données,
lorsque nous créons un index de la colonne type de Primary key
, ce que je comprends, c'est, il crée un arbre et le partage des valeurs de la racine basé sur le type de la valeur de la racine.
Maintenant, il ne stocker que la clé primaire ID
sous les arbres ou l'ensemble des données associées à cette clé primaire?
Après avoir trouvé le voulait primaire ID, comment fonctionne la base de données de l'extrait de l'enregistrement?
OriginalL'auteur JPro | 2010-03-02
Vous devez vous connecter pour publier un commentaire.
La base de données stocke la valeur indexée comme un
B-Tree
clé, et le pointeur d'enregistrement en tant queB-Tree
valeur.Chaque fois que vous effectuez une recherche pour un enregistrement de la possession d'une certaine valeur d'une colonne indexée, le moteur de situer la clé de la tenue de cette valeur dans le
B-Tree
, récupère le pointeur de l'enregistrement et de l'extrait de l'enregistrement.Ce qu'est exactement un "pointeur d'enregistrement", repose sur le moteur de stockage.
Dans
MyISAM
, le pointeur d'enregistrement est un décalage à l'enregistrement dans laMYI
fichier.Dans
InnoDB
, le pointeur d'enregistrement est la valeur de laPRIMARY KEY
.Dans
InnoDB
, la table elle-même est unB-Tree
avec unPRIMARY KEY
comme unB-Tree
clé. C'est ce qui s'appelle un "index cluster" ou "index-organisé la table". Dans ce cas, tous les autres champs sont stockés en tant queB-Tree
valeur.Dans
MyISAM
, les enregistrements sont stockés sans un ordre spécial. Ceci est appelé le "tas de stockage".La base de données gère les sous-jacents de l'indexation automatiquement les détails. Le
JOIN
la syntaxe est la même pourMyISAM
etInnoDB
tables.ce que je veux dire c'est, est-il important pour créer toutes les tables avec le même moteur de stockage ou pas?
vous pouvez mélanger les différents moteurs dans une requête librement. Soyez conscient, toutefois, que
MyISAM
n'a pas de soutien à la transaction, et lors de l'utilisation de plusieurs tables dans une mêmeDML
requête qui vous plus tard à la restauration, sachez que la restauration ne sera pas influer sur les changements àMyISAM
tables. Mais, encore une fois, dans unSELECT
requête, il est parfaitement ok pour mélanger les deux moteurs.juste une dernière question. Je vois dans mon dossier mysql, 2 types de fichiers (.frm et .myd), .myd les fichiers sont plus gros que .les fichiers frm. Je suppose que .frm utilisé par btrees. Comment les données sont stockées dans ces fichiers ? Si la base de données en veut à la recherche de n'importe quel disque, il suffit d'ouvrir le fichier et de recherche de l'arbre?
OriginalL'auteur Quassnoi