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 ?
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é
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
.