Maison  >  Article  >  base de données  >  Pourquoi la clé primaire MySQL augmente-t-elle automatiquement ?

Pourquoi la clé primaire MySQL augmente-t-elle automatiquement ?

(*-*)浩
(*-*)浩original
2019-05-07 15:27:196800parcourir

Les raisons de l'incrémentation automatique de la clé primaire MySQL : 1. L'enregistrement de données lui-même est stocké sur le nœud feuille de l'index primaire ; 2. MySQL l'insérera dans le nœud et l'emplacement appropriés en fonction de sa clé primaire ; ; 3. La table utilise une clé primaire à incrémentation automatique, chaque fois qu'un nouvel enregistrement est inséré, l'enregistrement sera ajouté séquentiellement à la position suivante du nœud d'index actuel.

Pourquoi la clé primaire MySQL augmente-t-elle automatiquement ?

La raison pour laquelle MySQL utilise des clés primaires à incrémentation automatique est que les tables InnoDB sont très pratiques à utiliser et que l'efficacité est considérablement améliorée.

Cours recommandé : Tutoriel MySQL.

Caractéristiques de la table moteur InnoDB

1. La table moteur InnoDB est une table organisée d'index (IOT) basée sur l'arborescence B+

À propos de l'arborescence B+<.>

Pourquoi la clé primaire MySQL augmente-t-elle automatiquement ?

Caractéristiques de l'arbre B+ :

Tous les mots-clés apparaissent dans la liste chaînée des nœuds feuilles (index dense), et les mots-clés de la liste chaînée se trouvent être Ordonné ;

ne peut pas toucher les nœuds non-feuilles ;

les nœuds non-feuilles sont équivalents à l'index des nœuds feuilles (index clairsemé), et les nœuds feuilles sont équivalents au stockage (mots-clés) des données. couche de données ;

2. Si nous définissons une clé primaire (PRIMARY KEY), alors InnoDB sélectionnera la clé primaire comme index clusterisé. Si la clé primaire n'est pas explicitement définie, InnoDB sélectionnera la première. qui ne contient pas NULL. L'index unique de la valeur est utilisé comme index de clé primaire. S'il n'existe pas d'index unique, InnoDB choisira le ROWID intégré de 6 octets comme index cluster implicite (ROWID est incrémenté comme). l'enregistrement de ligne est écrit et la clé primaire est incrémentée. Ce ROWID n'est pas comme le ROWID d'ORACLE peut être cité, ce qui est implicite).

3. L'enregistrement de données lui-même est stocké sur le nœud feuille de l'index principal (un B+Tree). Cela nécessite que chaque enregistrement de données dans le même nœud feuille (la taille d'une page mémoire ou d'une page disque) soit stocké dans l'ordre de la clé primaire, donc chaque fois qu'un nouvel enregistrement est inséré, MySQL l'insère dans le nœud approprié en fonction de sa clé primaire. . et position, si la page atteint le facteur de chargement (la valeur par défaut d'InnoDB est 15/16), une nouvelle page (nœud) sera ouverte


4. Si la table utilise une clé primaire à augmentation automatique, alors chacun Chaque fois qu'un nouvel enregistrement est inséré, l'enregistrement Il sera ajouté séquentiellement à la position suivante du nœud d'index actuel Lorsqu'une page est pleine, une nouvelle page sera ouverte automatiquement

5. Si un nouvel enregistrement n'est pas automatique. -une clé primaire croissante est utilisée (si le numéro d'identification ou le numéro d'étudiant, etc.), puisque la valeur de la clé primaire insérée à chaque fois est approximativement aléatoire, chaque nouvel enregistrement doit être inséré quelque part au milieu de la page d'index existante. cette fois, MySQL doit déplacer les données afin d'insérer le nouvel enregistrement à l'emplacement approprié, et même la page cible peut avoir été réécrite sur le disque et effacée du cache. À ce stade, elle doit être relue. du disque, ce qui ajoute beaucoup de surcharge. Dans le même temps, les opérations de déplacement et de pagination fréquentes provoquent de nombreux fragments, ce qui entraîne une image insuffisamment compacte. La structure de l'index nécessite OPTIMIZE TABLE pour reconstruire la table et optimiser le remplissage de la page.

Pour résumer, si l'ordre d'écriture des données de la table InnoDB peut être cohérent avec l'ordre des nœuds feuilles de l'index de l'arbre B+, l'efficacité d'accès sera la plus élevée à ce moment-là, ce qui est l'accès efficacité dans les situations suivantes La plus élevée :

Utiliser une colonne à incrémentation automatique (type INT/BIGINT) comme clé primaire À ce stade, l'ordre d'écriture est auto-incrémenté, ce qui est cohérent avec l'ordre de fractionnement de. B+ nœuds feuilles ;

Ce tableau ne précise pas La colonne d'incrémentation automatique est utilisée comme clé primaire, et il n'y a pas d'index unique qui peut être sélectionné comme clé primaire (la condition ci-dessus pour le moment). , InnoDB choisira le ROWID intégré comme clé primaire, et l'ordre d'écriture est cohérent avec l'ordre de croissance du ROWID


De plus, si une table InnoDB n'affiche pas de clé primaire, et il existe un index unique qui peut être sélectionné comme clé primaire, mais l'index unique peut ne pas être dans une relation incrémentielle (telle qu'une chaîne, un UUID, un index unique commun multi-champs), l'efficacité d'accès à la table sera relativement faible .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn