Maison >base de données >tutoriel mysql >Analyse du plan d'indexation simple MySQL

Analyse du plan d'indexation simple MySQL

WBOY
WBOYavant
2023-05-29 13:16:441212parcourir

    Index simple Mysql

    1. Comment rechercher quand il n'y a pas d'index

    Ignorez la notion d'index pour l'instant Si vous souhaitez rechercher directement un enregistrement maintenant, comment le rechercher ?

    Rechercher dans une page

    S'il y a très peu d'enregistrements dans le tableau et qu'une page suffit, alors il y a deux situations :

    • Utiliser la clé primaire comme condition de recherche : C'est la méthode mentionnée dans la précédente article , utilisez la méthode de dichotomie pour localiser rapidement l'emplacement dans le répertoire des pages, puis parcourez les enregistrements correspondant au groupe de l'emplacement, et enfin trouvez l'enregistrement spécifié.

    • Utilisez d'autres colonnes de clé non primaire comme conditions de recherche : étant donné qu'il n'y a pas de répertoire de pages pour les colonnes de clé non primaire dans la page de données, il est impossible de localiser rapidement l'emplacement via la méthode de dichotomie. enregistrement de la liste à chaînage unique à partir de l'enregistrement Infimum Inefficace.

    Rechercher dans plusieurs pages

    Lorsqu'il y a beaucoup d'enregistrements dans le tableau, de nombreuses pages de données seront utilisées pour les stocker. Dans ce cas, 2 étapes sont nécessaires :

    • Localiser la page où. le dossier est localisé.

    • Répétez le processus de recherche ci-dessus dans une page.

    En général, lorsqu'il n'y a pas d'index, nous ne pouvons pas localiser rapidement la page où se trouve l'enregistrement. Nous ne pouvons rechercher qu'à partir de la première page le long de la liste doublement chaînée (la page contient la page précédente et la page suivante). , puis recherchez sur chaque page. Répétez le processus ci-dessus dans la page pour interroger les enregistrements spécifiés, ce qui nécessite de parcourir tous les enregistrements, ce qui prend beaucoup de temps.

    2. Un index simple

    Étant donné que l'enregistrement de positionnement est trop lent à cause d'un trop grand nombre de pages, comment le résoudre ? Vous souhaiterez peut-être vous référer au « Répertoire des pages ».

    Le répertoire de pages est configuré pour localiser rapidement la position d'un enregistrement dans la page en fonction de la clé primaire. Par conséquent, nous pouvons explorer une méthode de création d’un « autre répertoire » pour localiser rapidement la page où se trouve l’enregistrement.

    Mais il y a deux choses à faire avant que cet « autre répertoire » puisse être complété.

    1. La valeur de la clé primaire de l'enregistrement utilisateur sur la page suivante doit être supérieure à celle de la page précédente

    En supposant que chaque page de données peut contenir jusqu'à 3 enregistrements (en fait, elle peut en mettre plusieurs), alors insérez maintenant 3 enregistrements dans le tableau, chaque enregistrement a 3 colonnes c1, c2, c3. Pour plus de commodité, le format des lignes de stockage est également simplifié, ne laissant que les attributs clés. Les enregistrements virtuels Infimum et Supremum sont situés respectivement au début et à la fin de l'enregistrement utilisateur, avec trois enregistrements utilisateur au milieu.

    Analyse du plan dindexation simple MySQL

    À ce moment, continuez à insérer 1 enregistrement. Dans le cas hypothétique, au moins une nouvelle page doit être allouée, les deux pages seront donc réaffectées et réorganisées.

    Analyse du plan dindexation simple MySQL

    Veuillez noter que les deux enregistrements affichés en rouge incluent un enregistrement nouvellement inséré avec une clé primaire de 4, qui doit être placé sur une nouvelle page. Cependant, afin de satisfaire à l'exigence selon laquelle la valeur de clé primaire de l'enregistrement utilisateur sur la page suivante doit être supérieure à la valeur de clé primaire de l'enregistrement utilisateur sur la page précédente, des opérations telles que le déplacement d'enregistrement sont également effectuées. être appelé « fractionnement de page ».

    Aussi, pourquoi la nouvelle page est-elle la page 28, et non la 11 ? Étant donné que les pages ne peuvent pas être côte à côte sur le disque, elles établissent simplement une relation de liste chaînée en conservant les numéros de la page précédente et de la page suivante.

    2. Créez une entrée de répertoire pour toutes les pages

    Maintenant, continuez à ajouter des données au tableau. La relation finale entre plusieurs pages est la suivante :

    Analyse du plan dindexation simple MySQL

    Afin de localiser rapidement un enregistrement à partir de plusieurs pages non adjacentes. , vous devez les cataloguer car les pages peuvent ne pas être contiguës sur le disque.

    Chaque page correspond à une entrée d'annuaire, et chaque entrée d'annuaire comprend :

    • La plus petite valeur de clé primaire dans l'enregistrement utilisateur de la page, représentée par key

    • Le numéro de page, représenté par page_no

    Donc, après les avoir catalogués, la relation est la suivante :

    Analyse du plan dindexation simple MySQL

    Donc, maintenant je veux trouver l'enregistrement avec une valeur de clé primaire de 20. Plus précisément, je vais le faire en deux étapes :

    Utiliser la dichotomie méthode pour déterminer rapidement la clé primaire à partir des entrées du répertoire. L'enregistrement avec la valeur de clé 20 se trouve dans l'entrée de répertoire 3 et le numéro de page sur lequel il se trouve est 9. Sachant qu'il se trouve à la page 9, répétez l'approche précédente pour trouver l'enregistrement cible final.

    À ce stade, une solution simple est complétée. Le répertoire simple complété a un alias appelé index.

    3. Problèmes exposés par l'index simple

    L'index simple mentionné ci-dessus est le contenu mis en place par l'auteur du livre original pour aider les lecteurs à comprendre étape par étape.

    Jetons donc un coup d’œil à l’index suggéré ci-dessus et voyons quels problèmes il y a.

    Question 1 :

    InnoDB utilise les pages comme unité de base pour gérer l'espace de stockage, ce qui signifie qu'il ne peut économiser que jusqu'à 16 Ko de stockage continu.

    Lorsqu'il y a de plus en plus d'enregistrements dans la table, un très grand espace de stockage continu est nécessaire pour contenir toutes les entrées du répertoire, ce qui est irréaliste pour les tables contenant de grandes quantités de données.

    Question 2 :

    Nous devons souvent ajouter, supprimer et modifier des enregistrements, ce qui peut affecter tout le corps.

    Par exemple, si je supprime tous les enregistrements de la page 28 dans l'image ci-dessus, alors la page 28 n'a pas besoin d'exister et l'entrée de répertoire 2 n'a pas besoin d'exister. À ce stade, vous devez déplacer les éléments du répertoire après l’élément de répertoire 2 vers l’avant.

    Même si elle n'est pas déplacée, placer l'entrée de répertoire 2 comme redondante dans la liste des entrées de répertoire gaspillera quand même beaucoup d'espace de stockage.

    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:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer