Principes d'indexation - en prenant innodb comme exemple
1. Écrivez devant
Alors que les tâches de développement et de test touchent à leur fin, tout le monde s'occupe du travail préparatoire avant la sortie du projet. L'une des tâches importantes est de créer des instructions SQL. L'index est très nécessaire dans un environnement avec une concurrence élevée et un trafic élevé. La construction d'un bon index peut donc grandement améliorer l'efficacité des requêtes des instructions SQL. Qu'est-ce qu'un index et comment créer un bon index ? ? Cet article prend le moteur de stockage mysql Innodb comme exemple et explique comment créer un bon index basé sur des projets réels.
2. Définition de l'index
La définition officielle de l'index par MySQL est la suivante : L'index (Index) est une structure de données qui aide MySQL à obtenir des données efficacement. En extrayant le radical de la phrase, vous pouvez obtenir l’essence de l’index : l’index est une structure de données.
Nous savons que la requête de base de données est l'une des fonctions les plus importantes de la base de données, comme l'instruction SQL suivante : SELECT * FROM test_table WHERE id = 99 ; l'enregistrement de données avec l'identifiant 99 peut être obtenu à partir de la table test_table.
Nous voulons tous interroger les données le plus rapidement possible, c'est pourquoi les concepteurs de systèmes de bases de données optimiseront du point de vue des algorithmes de requête. L'algorithme de requête le plus basique est bien sûr la recherche linéaire. Il parcourt test_table puis recherche ligne par ligne si la valeur de id est 99. Cet algorithme avec une complexité de O(n) est évidemment mauvais lorsque la quantité de données est bonne. Le développement de l'informatique a fourni de nombreux meilleurs algorithmes de recherche, tels que la recherche binaire, la recherche par arbre binaire, etc. Si vous faites une petite analyse, vous constaterez que chaque algorithme de recherche ne peut être appliqué qu'à des structures de données spécifiques. Par exemple, la recherche binaire nécessite que les données récupérées soient ordonnées, tandis que la recherche par arbre binaire ne peut être appliquée qu'aux arbres de recherche binaires, mais. les données elles-mêmes La structure organisationnelle ne peut pas satisfaire complètement diverses structures de données (par exemple, il est théoriquement impossible d'organiser les deux colonnes dans l'ordre en même temps), donc en plus des données, le système de base de données maintient également des structures de données qui satisfont une recherche spécifique Les structures font référence (pointent vers) les données d'une manière ou d'une autre, ce qui permet d'implémenter des algorithmes de recherche avancés sur ces structures de données. Cette structure de données est un index.
L'exemple ci-dessus est principalement utilisé pour illustrer brièvement le rôle de l'index. La plupart des systèmes de bases de données et des systèmes de fichiers, y compris mysql Innodb, ne choisissent pas la structure arborescente binaire comme index, mais utilisent B-Tree ou sa variante B Tree. sert de structure d'index. Cette structure d'index peut minimiser le nombre d'accès aux E/S disque pendant le processus de recherche. Vous pouvez découvrir par vous-même ce qu'est B-Tree ou B Tree et les raisons de les choisir comme structures d'index de base de données. . Ci-dessous, nous présentons d'abord les deux index B Tree du moteur mysql Innodb.
3. Index Mysql Innodb B Tree
L'un est l'index de clé primaire, qui est l'index clusterisé (index de cluster). Il contient non seulement la clé primaire, mais également toutes les données. à laquelle appartient la clé primaire, donc dans Innodb, l'index de clé primaire est la donnée
L'un est un index de clé non primaire (index secondaire) dans lequel la valeur de la colonne est Key et la position de la clé primaire ; est la valeur, c'est-à-dire (valeur de la colonne, position de la clé primaire)
Innodb est un index -table organisée, et toutes les données sont suspendues sous le nœud feuille de clé primaire. Par conséquent, si l'ordre d'insertion des clés primaires ne peut pas être garanti, un grand nombre de divisions de nœuds de clé primaire se produiront, entraînant un grand nombre d'opérations d'E/S. De plus, Innodb stipule que la longueur d'un seul champ d'index ne doit pas dépasser 768 octets, sinon la longueur sera tronquée et non placée dans l'index. Les index de clé non primaire d'Innodb pointent tous vers l'index de clé primaire. La recherche de l'index de clé non primaire ne peut pas obtenir la ligne entière de données. Vous devez trouver l'emplacement de son index de clé primaire via le pointeur du nœud feuille pour obtenir le. ligne entière de données. Par conséquent, l'index de clé primaire doit être conçu aussi petit que possible, sinon l'index de clé non primaire sera très grand.
4.Principes d'indexation
Examinons ensuite les principes qui doivent être suivis pour construire un bon index, et illustrés par des exemples spécifiques
1 Le principe de correspondance du préfixe le plus à gauche, un principe très important, mysql correspondra toujours au préfixe le plus à gauche. jusqu'à ce qu'il rencontre Arrêter la correspondance lors de l'atteinte de la requête de plage (>, de (a, b, c, d), D n'est pas utilisé pour l'indexation. Si vous créez un index pour (a, b, d, c), il peut être utilisé. L'ordre de a, b, d peut être ajusté. arbitrairement.
2. = et in peuvent être dans le désordre, comme a = 1 et b = 2 et c = 3. Vous pouvez créer des index (a, b, c) dans n'importe quel ordre. L'optimiseur de requêtes MySQL vous aidera à optimiser. l'index sous une forme reconnaissable.
3. Essayez de choisir des colonnes avec une distinction élevée comme index. La formule de distinction est count(distinct col)/count(*), qui représente la proportion de champs qui ne sont pas répétés. nous analysons, et le degré d'unicité de la clé est de 1, tandis que le degré de distinction de certains champs de statut et de genre peut être de 0 face au Big Data. Alors quelqu'un peut se demander : y a-t-il une valeur empirique pour ce rapport ? Différents scénarios d'utilisation rendent cette valeur difficile à déterminer. Généralement, nous exigeons que les champs qui doivent être joints soient supérieurs à 0,1, soit une moyenne de 10 enregistrements par analyse
4. Les colonnes d'index ne peuvent pas participer aux calculs, conservez donc les colonnes. "clean", comme from_unixtime (create_time) = '2015-08-14' ne peut pas utiliser l'index. La raison est très simple. Le b-tree stocke toutes les valeurs de champdans la table de données, mais lors de la récupération, vous devez appliquer des fonctions à tous les éléments pour comparer. Le coût est évidemment trop élevé. La déclaration doit donc être écrite sous la forme create_time = unix_timestamp('2015-08-14').
5. Développez l'index autant que possible, ne créez pas un nouvel index. Par exemple, il y a déjà un index pour a dans la table, et maintenant vous souhaitez ajouter un index pour (a, b), il vous suffit alors de modifier l'index d'origine.
6. Dans la clause order by ou group by, si vous souhaitez trier par index, l'ordre des colonnes d'index doit être cohérent avec l'ordre de la clause order by ou group by, et le sens de tri de toutes les colonnes. (ordre inverse ou séquence positive) sont les mêmes ; si la requête est associée à plusieurs tables, l'index ne peut être utilisé pour trier que lorsque les champs référencés par la clause order by proviennent tous de la première table ; Les instructions group by et les instructions de type requête sont les mêmes : le principe du préfixe le plus à gauche de l'index doit être satisfait ; sinon mysql effectuera une opération de tri et ne pourra pas utiliser l'index pour trier (il existe une situation où l'ordre par ou le groupe ; by ne satisfait pas au principe du préfixe le plus à gauche, c'est-à-dire que son leader est une constante. Quand, si Where ou join spécifient des constantes pour ces colonnes, cela peut compenser le manque d'index).
5. Exemple
Déclaration 1 :
Déclaration 2 :
Pour ces deux déclarations, si elles sont considérées séparément, vous pouvez créer deux index :
Create (status, netting_batch_no, Debor_agent_member_id) pour la déclaration 1
Pour la déclaration 2 Create (netting_batch_no, Debtor_agent_member_id,transaction_currency);
Si vous considérez tout cela, un seul index suffit en fait, c'est-à-dire (netting_batch_no,debtor_agent_member_id). Il n'est pas nécessaire de mettre les champs status ou transaction_currency dans l'index car ces deux La distinction entre les champs est). trop pauvre ;
Selon le principe d'indexation 2, l'instruction 1 peut aller à cet index
Selon le principe d'indexation 1, l'instruction 2 peut également aller à cet index ; Créer trop d'index augmentera la consommation de mémoire ou de disque de la base de données et affectera les performances des opérations telles que l'insertion et la suppression. Lors de l'établissement d'un index, vous devez suivre les principes de création d'index et tout considérer

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

InnoDB est l'un des moteurs de base de données de MySQL. C'est désormais le moteur de stockage par défaut de MySQL et l'une des normes pour les versions binaires de MySQL AB adopte un système d'autorisation à double voie, l'une est une autorisation GPL et l'autre est un logiciel propriétaire. autorisation. InnoDB est le moteur préféré pour les bases de données transactionnelles et prend en charge les tables de sécurité des transactions (ACID) ; InnoDB prend en charge les verrous au niveau des lignes, qui peuvent prendre en charge dans la plus grande mesure la concurrence. Les verrous au niveau des lignes sont implémentés par la couche moteur de stockage.

InnoDB est un moteur de stockage qui stocke les données dans des tables sur disque, de sorte que nos données existeront toujours même après l'arrêt et le redémarrage. Le processus réel de traitement des données se produit en mémoire, de sorte que les données du disque doivent être chargées dans la mémoire. S'il traite une demande d'écriture ou de modification, le contenu de la mémoire doit également être actualisé sur le disque. Et nous savons que la vitesse de lecture et d'écriture sur le disque est très lente, ce qui est plusieurs ordres de grandeur différents de la lecture et de l'écriture en mémoire. Ainsi, lorsque nous voulons obtenir certains enregistrements de la table, le moteur de stockage InnoDB doit-il lire. les enregistrements du disque un par un ? La méthode adoptée par InnoDB consiste à diviser les données en plusieurs pages et à utiliser les pages comme unité de base d'interaction entre le disque et la mémoire. La taille d'une page dans InnoDB est généralement de 16.

1. Restaurez et réinstallez MySQL Afin d'éviter d'avoir à importer ces données depuis d'autres endroits, effectuez d'abord une sauvegarde du fichier de base de données de la bibliothèque actuelle (/var/lib/mysql/location). Ensuite, j'ai désinstallé le package Perconaserver5.7, réinstallé l'ancien package 5.1.71 d'origine, démarré le service mysql, et il a demandé Unknown/unsupportedtabletype:innodb et n'a pas pu démarrer normalement. 11050912:04:27InnoDB : initialisation du pool de tampons, taille = 384,0 M11050912:04:27InnoDB : terminé

1. Niveau d'isolement des transactions Mysql Ces quatre niveaux d'isolement, lorsqu'il y a plusieurs conflits de concurrence de transactions, certains problèmes de lecture sale, de lecture non répétable et de lecture fantôme peuvent survenir, et innoDB les résout en mode niveau d'isolement de lecture répétable. de la lecture fantôme, 2. Qu'est-ce que la lecture fantôme ? La lecture fantôme signifie que dans la même transaction, les résultats obtenus en interrogeant la même plage deux fois avant et après sont incohérents, comme le montre la figure. Dans la première transaction, nous exécutons une requête de plage. À l'heure actuelle, il n'y a qu'une seule donnée qui remplit les conditions. Dans la deuxième transaction, il insère une ligne de données et la soumet. Ensuite, lorsque la première transaction est à nouveau interrogée, le résultat obtenu est un de plus que le résultat de. la première requête Data, notez que les première et deuxième requêtes de la première transaction sont toutes deux identiques.

Comparaison de sélection du moteur de stockage MySQL : évaluation de l'indice de performance InnoDB, MyISAM et mémoire Introduction : Dans la base de données MySQL, le choix du moteur de stockage joue un rôle essentiel dans les performances du système et l'intégrité des données. MySQL fournit une variété de moteurs de stockage, les moteurs les plus couramment utilisés incluent InnoDB, MyISAM et Memory. Cet article évaluera les indicateurs de performances de ces trois moteurs de stockage et les comparera à travers des exemples de code. 1. Moteur InnoDB InnoDB est mon

Les capacités de recherche en texte intégral d'InNODB sont très puissantes, ce qui peut considérablement améliorer l'efficacité de la requête de la base de données et la capacité de traiter de grandes quantités de données de texte. 1) INNODB implémente la recherche de texte intégral via l'indexation inversée, prenant en charge les requêtes de recherche de base et avancées. 2) Utilisez la correspondance et contre les mots clés pour rechercher, prendre en charge le mode booléen et la recherche de phrases. 3) Les méthodes d'optimisation incluent l'utilisation de la technologie de segmentation des mots, la reconstruction périodique des index et l'ajustement de la taille du cache pour améliorer les performances et la précision.

MySQL est un système de gestion de bases de données largement utilisé et différents moteurs de stockage ont des impacts différents sur les performances des bases de données. MyISAM et InnoDB sont les deux moteurs de stockage les plus couramment utilisés dans MySQL. Ils ont des caractéristiques différentes et une mauvaise utilisation peut affecter les performances de la base de données. Cet article explique comment utiliser ces deux moteurs de stockage pour optimiser les performances de MySQL. 1. Moteur de stockage MyISAM MyISAM est le moteur de stockage le plus couramment utilisé pour MySQL. Ses avantages sont une vitesse rapide et un petit espace de stockage. MonISA

Conseils et stratégies pour améliorer les performances de lecture du moteur de stockage MySQL : Analyse comparative de MyISAM et InnoDB Introduction : MySQL est l'un des systèmes de gestion de bases de données relationnelles open source les plus couramment utilisés, principalement utilisé pour stocker et gérer de grandes quantités de données structurées. Dans les applications, les performances de lecture de la base de données sont souvent très importantes, car les opérations de lecture constituent le principal type d'opérations dans la plupart des applications. Cet article se concentrera sur la façon d'améliorer les performances de lecture du moteur de stockage MySQL, en se concentrant sur une analyse comparative de MyISAM et InnoDB, deux moteurs de stockage couramment utilisés.
