Pourquoi innodb ne stocke-t-il pas les pointeurs de ligne dans les index secondaires/non clusterisés ?
P粉038161873
P粉038161873 2023-09-11 17:28:42
0
1
593

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粉038161873
P粉038161873

répondre à tous(1)
P粉469090753

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal