Table des matières
Arbre B+ (arbre de recherche équilibré multidirectionnel)
L'index auxiliaire
Index conjoint
Index de couverture
Notes
Maison base de données tutoriel mysql Introduction détaillée au principe de l'index mysql innodb (exemple de code)

Introduction détaillée au principe de l'index mysql innodb (exemple de code)

Mar 04, 2019 pm 03:06 PM
mysql 存储过程 数据库 查询优化 索引

Ce que cet article vous apporte est une introduction détaillée (exemple de code) sur le principe d'indexation mysql innodb. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Index clusterisé

La table du moteur de stockage innodb est une table organisée en index et les données de la table sont stockées dans l'ordre des clés primaires. L'index clusterisé construit un arbre B+ dans l'ordre des clés primaires de chaque table, et ses nœuds feuilles stockent les données d'enregistrement de ligne de la table entière, et ces nœuds feuilles deviennent des pages de données. (Recommandations associées : Tutoriel MySQL)

Le stockage de l'index clusterisé n'est pas physiquement continu, mais logiquement continu. Les nœuds feuilles sont triés dans l'ordre de la clé primaire et connectés via un. liste chaînée bidirectionnelle. Dans la plupart des cas, l'optimiseur de requêtes a tendance à utiliser des index clusterisés, car les index clusterisés peuvent trouver des données directement sur les nœuds feuilles et, comme l'ordre logique des données est défini, les requêtes sur les valeurs de plage sont accessibles très rapidement.

Cette fonctionnalité de l'index clusterisé détermine que les données de la table organisée en index font également partie de l'index. Étant donné que les données de la table ne peuvent être triées que selon un arbre B+, une table ne peut avoir qu'un seul index clusterisé.

Dans Innodb, l'index clusterisé est l'index de clé primaire par défaut. S'il n'y a pas de clé primaire, un index clusterisé sera construit selon les règles suivantes :

  • Lorsqu'il n'y a pas de clé primaire, une colonne d'index non nulle et unique sera utilisée comme clé primaire et devenez l'index clusterisé de cette table ;
  • S'il n'existe pas un tel index, InnoDB définira implicitement une clé primaire comme un index clusterisé.

Étant donné que la clé primaire utilise un index clusterisé, si la clé primaire est un identifiant à incrémentation automatique, les données correspondantes seront stockées de manière adjacente sur le disque et les performances d'écriture seront élevées. S'il se présente sous la forme d'une chaîne telle que uuid, une insertion fréquente entraînera un déplacement fréquent des blocs de disque par innodb et les performances d'écriture seront relativement faibles.

Arbre B+ (arbre de recherche équilibré multidirectionnel)

Nous savons que l'index du moteur innodb utilise la structure arborescente B+, alors pourquoi pas d'autres types de structures arborescentes, comme les arbres binaires ?

Lorsqu'un ordinateur stocke des données, il dispose d'une unité de stockage minimale, tout comme l'unité minimale de circulation du RMB est le centime. La plus petite unité du système de fichiers est un bloc. La taille d'un bloc est de 4K (cette valeur varie selon le système et peut être définie. Le moteur de stockage InnoDB possède également sa propre unité de stockage minimale - page (Page). la taille d'une page est de 16 Ko (cette valeur est également configurable).

La taille d'un fichier dans le système de fichiers n'est que de 1 octet, mais il doit occuper 4 Ko d'espace sur le disque. De la même manière, la taille de tous les fichiers de données dans innodb est toujours un multiple entier de 16 384 (16 Ko).

Introduction détaillée au principe de lindex mysql innodb (exemple de code)

Ainsi, dans MySQL, un nœud de bloc qui stocke l'index occupe 16 Ko, et chaque opération d'E/S de MySQL utilisera la capacité de lecture anticipée du système pour charger 16 Ko à la fois. De cette façon, il est très inutile de mettre une seule valeur d'index dans ce nœud, car une seule valeur d'index peut être obtenue à un instant IO, donc un arbre binaire ne peut pas être utilisé.

L'arbre B+ est un arbre de recherche multidirectionnel. Un nœud peut contenir n valeurs, n = 16K / la taille de chaque valeur d'index.
Par exemple, si la taille du champ d'index est de 1 Ko, alors chaque nœud peut théoriquement stocker 16 valeurs d'index. Dans ce cas, l'arbre binaire ne peut charger qu'une seule valeur d'index par IO, tandis que l'arbre B+ peut en charger 16.

Le nombre de voies de l'arbre B+ est n+1, où n est le nombre de valeurs qui existent dans chaque nœud. Par exemple, chaque nœud stocke 16 valeurs, alors cet arbre a 17 voies.

On peut également voir à partir d'ici que les nœuds de l'arbre B+ peuvent stocker plusieurs valeurs, de sorte que l'index de l'arbre B+ ne peut pas trouver une ligne spécifique avec une valeur de clé donnée. L'arborescence B+ peut uniquement trouver la page spécifique où la ligne de données est stockée, puis lire la page dans la mémoire, puis rechercher les données spécifiées dans la mémoire.

Pièce jointe : La différence entre l'arbre B et l'arbre B+ est que les nœuds non-feuilles de l'arbre B+ contiennent uniquement des informations de navigation et ne contiennent pas de valeurs réelles. Tous les nœuds feuilles et les nœuds connectés sont connectés à l'aide de listes chaînées. faciliter la recherche et la traversée d'intervalles.

L'index auxiliaire

est également appelé index non clusterisé. Ses nœuds feuilles ne contiennent pas toutes les données enregistrées dans la ligne. En plus de la valeur clé, le nœud feuille contient l'index. ligne dans chaque nœud feuille Contient également un signet, qui est la clé d'index clusterisé pour la ligne correspondante.

La figure suivante montre la relation entre l'index auxiliaire et l'index clusterisé (l'image vient d'Internet, il suffit de regarder la signification générale) :

Introduction détaillée au principe de lindex mysql innodb (exemple de code)

Lors de l'utilisation de l'index auxiliaire Lors de la recherche de données, le moteur de stockage innodb obtiendra la clé primaire qui souhaite uniquement l'index de clé primaire via le nœud feuille d'index auxiliaire, puis trouvera l'enregistrement de ligne complet via l'index de clé primaire.

Par exemple, si vous souhaitez rechercher des données dans une arborescence d'index auxiliaire d'une hauteur de 3, vous devez effectuer 3 IO sur l'arborescence d'index auxiliaire pour trouver la clé primaire spécifiée si la hauteur du cluster. L'arbre d'index est également 3, alors vous devez rechercher trois fois dans l'arbre d'index clusterisé pour enfin trouver une page où se trouvent les données complètes de la ligne, donc un total de six accès IO sont nécessaires pour obtenir la page de données finale. Les index créés par

, tels que les index conjoints, les index uniques, etc., sont des index non clusterisés.

Index conjoint

L'index conjoint fait référence à l'indexation de plusieurs colonnes de la table. L'index conjoint est également un arbre B+. La différence est que le nombre de valeurs clés dans l'index conjoint n'est pas 1, mais supérieur ou égal à 2.

Par exemple, il existe une table utilisateur avec les champs id, age et name. On constate que les deux SQL suivants sont les plus fréquemment utilisés :

Select * from user where age = ? ;
Select * from user where age = ? and name = ?;
Copier après la connexion

À l'heure actuelle, il n'est pas nécessaire d'en créer deux distincts pour l'âge et le nom, il vous suffit de créer l'index conjoint suivant :

create index idx_age_name on user(age, name)
Copier après la connexion

Un autre avantage de l'index conjoint est que la deuxième valeur clé a été triée. , ce qui peut parfois éviter une opération de tri supplémentaire.

Index de couverture

Index de couverture, c'est-à-dire que vous pouvez obtenir toutes les valeurs de champ requises pour la requête à partir de l'index auxiliaire sans interroger les enregistrements de l'index clusterisé. L'avantage de l'index de couverture est que l'index auxiliaire ne contient pas toutes les informations de l'enregistrement de ligne complet, sa taille est donc beaucoup plus petite que l'index clusterisé, ce qui permet de réduire un grand nombre d'opérations d'E/S.

Par exemple, s'il existe un index conjoint (âge, nom) ci-dessus, s'il est le suivant :

select age,name from user where age=?
Copier après la connexion

Vous pouvez utiliser l'index couvrant.

Un autre avantage de la couverture des index concerne les problèmes statistiques, tels que :

select count(*) from user
Copier après la connexion

Le moteur de stockage innodb ne choisit pas d'interroger l'index clusterisé pour obtenir des statistiques. Puisqu'il existe un index auxiliaire sur la table utilisateur et que l'index auxiliaire est beaucoup plus petit que l'index clusterisé, la sélection de l'index auxiliaire peut réduire les opérations d'E/S.

Notes

  • Construisez uniquement des index appropriés, pas des index redondants
Parce que chaque fois que des données sont ajoutées ou supprimées, l'arborescence B+ doit être ajustée si. plusieurs index sont créés, plusieurs arbres B+ doivent être ajustés. Plus il y a d'arbres et plus la structure est grande, plus cet ajustement prend du temps et des ressources. Si ces index inutiles sont réduits, l'utilisation du disque peut être considérablement réduite.
  • La longueur des données de la colonne d'index peut être aussi petite que possible.

Plus la longueur des données d'index est petite, plus d'index sont stockés dans chaque bloc et plus de valeurs peuvent être obtenues dans une IO.

  • Le préfixe de colonne correspondant peut être utilisé dans l'index comme 9999%, comme %9999%, comme %9999 ne peut pas utiliser l'index
  • Dans et ou dans le ; Où la condition peut utiliser l'index, pas dans et , les opérations ne peuvent pas utiliser d'index

S'il n'est pas dans ou , face à l'arborescence B+, le moteur ne sait pas lequel ; nœud à partir duquel commencer.

  • Faire correspondre les valeurs de plage, trier par peut également être utilisé pour indexer
  • Utilisez les requêtes de colonnes spécifiées plus souvent, ne renvoyez que les colonnes de données auxquelles vous pensez, utilisez select * less;

Il n'est pas nécessaire d'interroger les champs inutiles, et si vous n'utilisez pas *, vous pouvez accéder à l'index de couverture

  • Si vous ne commencez pas la recherche en fonction de la colonne la plus à gauche de l'index dans l'index conjoint, vous ne pouvez pas utiliser l'index

Principe de correspondance le plus à gauche

  • Dans le joint ; index, index peut être utilisé pour faire correspondre avec précision la colonne la plus à gauche et la plage correspond à une autre colonne
  • S'il existe une requête de plage pour une certaine colonne dans la requête de l'index conjoint, toutes les colonnes à sa droite ne peuvent pas être indexé

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MySQL: la facilité de gestion des données pour les débutants MySQL: la facilité de gestion des données pour les débutants Apr 09, 2025 am 12:07 AM

MySQL convient aux débutants car il est simple à installer, puissant et facile à gérer les données. 1. Installation et configuration simples, adaptées à une variété de systèmes d'exploitation. 2. Prise en charge des opérations de base telles que la création de bases de données et de tables, d'insertion, d'interrogation, de mise à jour et de suppression de données. 3. Fournir des fonctions avancées telles que les opérations de jointure et les sous-questionnaires. 4. Les performances peuvent être améliorées par l'indexation, l'optimisation des requêtes et le partitionnement de la table. 5. Prise en charge des mesures de sauvegarde, de récupération et de sécurité pour garantir la sécurité et la cohérence des données.

Comment ouvrir phpmyadmin Comment ouvrir phpmyadmin Apr 10, 2025 pm 10:51 PM

Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL: Concepts simples pour l'apprentissage facile MySQL: Concepts simples pour l'apprentissage facile Apr 10, 2025 am 09:29 AM

MySQL est un système de gestion de base de données relationnel open source. 1) Créez une base de données et des tables: utilisez les commandes CreateDatabase et CreateTable. 2) Opérations de base: insérer, mettre à jour, supprimer et sélectionner. 3) Opérations avancées: jointure, sous-requête et traitement des transactions. 4) Compétences de débogage: vérifiez la syntaxe, le type de données et les autorisations. 5) Suggestions d'optimisation: utilisez des index, évitez de sélectionner * et utilisez les transactions.

Comment créer Navicat Premium Comment créer Navicat Premium Apr 09, 2025 am 07:09 AM

Créez une base de données à l'aide de NAVICAT Premium: Connectez-vous au serveur de base de données et entrez les paramètres de connexion. Cliquez avec le bouton droit sur le serveur et sélectionnez Créer une base de données. Entrez le nom de la nouvelle base de données et le jeu de caractères spécifié et la collation. Connectez-vous à la nouvelle base de données et créez le tableau dans le navigateur d'objet. Cliquez avec le bouton droit sur le tableau et sélectionnez Insérer des données pour insérer les données.

MySQL et SQL: Compétences essentielles pour les développeurs MySQL et SQL: Compétences essentielles pour les développeurs Apr 10, 2025 am 09:30 AM

MySQL et SQL sont des compétences essentielles pour les développeurs. 1.MySQL est un système de gestion de base de données relationnel open source, et SQL est le langage standard utilisé pour gérer et exploiter des bases de données. 2.MySQL prend en charge plusieurs moteurs de stockage via des fonctions de stockage et de récupération de données efficaces, et SQL termine des opérations de données complexes via des instructions simples. 3. Les exemples d'utilisation comprennent les requêtes de base et les requêtes avancées, telles que le filtrage et le tri par condition. 4. Les erreurs courantes incluent les erreurs de syntaxe et les problèmes de performances, qui peuvent être optimisées en vérifiant les instructions SQL et en utilisant des commandes Explication. 5. Les techniques d'optimisation des performances incluent l'utilisation d'index, d'éviter la numérisation complète de la table, d'optimiser les opérations de jointure et d'améliorer la lisibilité du code.

Comment créer une nouvelle connexion à MySQL dans Navicat Comment créer une nouvelle connexion à MySQL dans Navicat Apr 09, 2025 am 07:21 AM

Vous pouvez créer une nouvelle connexion MySQL dans NAVICAT en suivant les étapes: ouvrez l'application et sélectionnez une nouvelle connexion (CTRL N). Sélectionnez "MySQL" comme type de connexion. Entrez l'adresse Hostname / IP, le port, le nom d'utilisateur et le mot de passe. (Facultatif) Configurer les options avancées. Enregistrez la connexion et entrez le nom de la connexion.

Comment exécuter SQL dans Navicat Comment exécuter SQL dans Navicat Apr 08, 2025 pm 11:42 PM

Étapes pour effectuer SQL dans NAVICAT: Connectez-vous à la base de données. Créez une fenêtre d'éditeur SQL. Écrivez des requêtes ou des scripts SQL. Cliquez sur le bouton Exécuter pour exécuter une requête ou un script. Affichez les résultats (si la requête est exécutée).

Navicat se connecte au code et à la solution d'erreur de base de données Navicat se connecte au code et à la solution d'erreur de base de données Apr 08, 2025 pm 11:06 PM

Erreurs et solutions courantes Lors de la connexion aux bases de données: nom d'utilisateur ou mot de passe (erreur 1045) Blocs de pare-feu Connexion (erreur 2003) Délai de connexion (erreur 10060) Impossible d'utiliser la connexion à socket (erreur 1042) Erreur de connexion SSL (erreur 10055) Trop de connexions Résultat de l'hôte étant bloqué (erreur 1129)

See all articles