Maison > Questions et réponses > le corps du texte
Comme nous le savons tous, innodb ne stocke que les valeurs de clé primaire dans l'index secondaire, ce qui signifie que nous devons parcourir à nouveau l'arborescence de l'index clusterisé B+ pour obtenir les enregistrements de ligne.
Pourquoi ne pas stocker le pointeur de ligne directement dans l'index secondaire pour réduire le travail de recherche supplémentaire ?
P粉4690907532023-09-12 16:06:28
Il n’y a pas de « pointeur de ligne ». Les colonnes de PRMARY KEY
ont la fonctionnalité de localiser les lignes dans le BTree de données.
Bien sûr, la recherche via PK est sans doute plus lente que le « pointeur de ligne ». Mais les mises à jour, les suppressions, les fractionnements de blocs, etc. sont tous gérés automatiquement. (Voir le commentaire de Bill.) Cela simplifie le code. Et dans certains cas, plus rapidement.
Exemple simple et plus rapide : Étant donné
PRIMARY KEY(id), INDEX(foo) -- effectively (foo, id), as discussed above SELECT id FROM tbl WHERE foo = 123;
Dans cet exemple, le BTree indexé a la réponse complète ; pas besoin d'accéder aux données BTree. Par conséquent, cet index est appelé la « couverture » de ce SELECT
.