Base de données MySQL - index (6) - utilisation de l'index (couvrant les requêtes de retour d'index et de table, l'index de préfixe, l'index à colonne unique et l'index conjoint), principes de conception d'index, résumé de l'index

Table des matières

Utilisation de l'index (partie 2)

Couvrant les requêtes de retour d'index et de table

Questions de réflexion

index de préfixe

grammaire

Exemple

longueur du préfixe

Processus de requête de l'index de préfixe

Index à colonne unique et index conjoint 

Principes de conception des indices

Sommaire de l'index

1. Aperçu de l'indice

2. Structure de l'indice 

3. Classement de l'indice 

4. Syntaxe de l'index

5.Analyse des performances SQL 

6. Utilisation de l'index 

7. Principes de conception des indices 


Utilisation de l'index (partie 2)

Couvrant les requêtes de retour d'index et de table

Un index de couverture signifie que la requête utilise un index et que toutes les colonnes qui doivent être renvoyées peuvent être trouvées dans l'index.

Examinons d'abord le processus d'exécution de l'ensemble de SQL suivant pour mieux comprendre la couverture des requêtes de retour d'index et de table.

Structure du tableau et diagramme d'index : 

id est la clé primaire et est un index clusterisé. Un index commun est établi sur le champ nom, qui est un index secondaire (index auxiliaire).

Exécutez SQL :

select * from tb_user where id = 2;

Selon la requête id,nous utilisons directement la requête d'index clusterisé.Une analyse d'index correspond à l'id comme 2.Étant donné que les données de ligne sont placées sous les nœuds feuilles dans l'index clusterisé, nous pouvons obtenir les données souhaitées et les renvoyer directement. avec des performances élevées.

Regarde encore,

Exécutez SQL :

selet id,name from tb_user where name = 'Arm';

Bien que la requête soit basée sur le champ de nom et que l'index secondaire soit interrogé, puisque les champs renvoyés par la requête sont id et name, dans l'index secondaire de nom, ces deux valeurs peuvent être obtenues directement. couvrant l'index. Par conséquent, il n'est pas nécessaire d'interroger la table et les performances sont élevées.

Dernier regard,

Exécutez SQL :

selet id,name,gender from tb_user where name = 'Arm';

Étant donné que le sexe n'est pas inclus dans l'index secondaire du nom, deux analyses d'index sont nécessaires, c'est-à-dire qu'une requête de table est requise et les performances sont relativement médiocres.

Nous pouvons regarder le plan d'exécution de MySQL.Tous les indicateurs du plan d'exécution de certaines instructions SQL sont les mêmes et aucune différence n'est visible. Cependant, nous voulons prêter attention à l’Extra qui se cache derrière :

Supplémentaire signification
Utiliser où ; Utilisation de l'index La recherche utilise un index, mais les données requises peuvent être trouvées dans les colonnes d'index, il n'est donc pas nécessaire de revenir à la table pour interroger les données.
Utilisation de la condition d'index La recherche utilise un index, mais doit renvoyer la table pour interroger les données.

Par conséquent, dans le plan d'exécution, si Extra est « Utilisation de la condition d'index », il devra peut-être être modifié et optimisé.

Questions de réflexion

Une table comporte quatre champs (id, nom d'utilisateur, mot de passe, statut). En raison de la grande quantité de données, l'
instruction SQL suivante doit être optimisée. La meilleure solution est de procéder comme suit :

select id,username,password from tb_user where username = 'itcast';


Répondre:

Créer un index commun pour le nom d'utilisateur et le mot de passe,

Le SQL est : créer un index idx_user_name_pass sur tb_user (nom d'utilisateur, mot de passe) ;
cela peut éviter l'instruction SQL ci-dessus et la requête de retour de table pendant le processus de requête.

index de préfixe

Lorsque le type de champ est une chaîne (varchar, text, longtext, etc.), une chaîne très longue doit parfois être indexée, ce qui rendra l'index
très volumineux et gaspillera beaucoup d'E/S disque pendant la requête, affectant l'efficacité de la requête.

Pour le moment, vous ne pouvez préfixer qu'une partie de la chaîne pour créer un index, ce qui peut considérablement économiser de l'espace d'indexation et améliorer l'efficacité de l'indexation.

grammaire

create index idx_xxxx on table_name( column(n) );

Exemple

Créez un index de préfixe de longueur 5 pour le champ email de la table tb_user.

create index idx_email_5 on tb_user ( email(5) );

longueur du préfixe

Il peut être déterminé en fonction de la sélectivité de l'index , qui fait référence au rapport entre les valeurs d'index uniques (cardinalité) et le nombre total d'enregistrements dans la table de données . Plus la sélectivité de l'index est élevée, plus l'efficacité de la requête est élevée. la sélectivité de l'index unique est de 1. Il s'agit de la meilleure sélectivité de l'index et offre les meilleures performances.

select count(distinct email) / count(*) from tb_user ;

select count(distinct substring(email,1,5)) / count(*) from tb_user ;

Processus de requête de l'index de préfixe

Index à colonne unique et index conjoint 

Index à colonne unique : Un index ne contient qu’une seule colonne.
Index union : Un index contient plusieurs colonnes.

Dans le plan d'exécution, si les deux champs phone et name sont des index à une seule colonne, mais qu'à la fin MySQL ne sélectionnera qu'un seul index, c'est-à-dire qu'un seul index de champ pourra être utilisé. À ce stade, la table sera renvoyée pour requête.

Dans un scénario métier, s'il existe plusieurs conditions de requête, lorsque vous envisagez de créer un index sur le champ de requête, il est recommandé de créer un index conjoint
au lieu d'un index à colonne unique.

Principes de conception des indices

  1. Créez des index pour les tables contenant de grandes quantités de données et des requêtes fréquentes.
  2. Créez des index pour les champs qui sont souvent utilisés comme conditions de requête (où), opérations de tri (trier par) et de regroupement (regrouper par).
  3. Essayez de sélectionner des colonnes avec une discrimination élevée comme index et essayez de créer des index uniques. Plus la discrimination est élevée, plus l'utilisation des index est efficace.
  4. S'il s'agit d'un champ de type chaîne et que la longueur du champ est longue, un index de préfixe peut être établi en fonction des caractéristiques du champ.
  5. Essayez d'utiliser des index conjoints et réduisez les index à colonne unique. Lors des requêtes, les index conjoints peuvent souvent couvrir les index, économiser de l'espace de stockage, éviter les retours de table et améliorer l'efficacité des requêtes.
  6. Pour contrôler le nombre d'index, plus il y a d'index, mieux c'est. Plus il y a d'index, plus le coût de maintenance de la structure de l'index est élevé, ce qui affectera l'efficacité des ajouts, des suppressions et des modifications.
  7. Si une colonne indexée ne peut pas stocker de valeurs NULL, limitez-la à l'aide de NOT NULL lors de la création de la table. Lorsque l'optimiseur sait si chaque colonne contient des valeurs NULL, il peut mieux déterminer quel index utiliser le plus efficacement pour la requête.

Sommaire de l'index

1. Aperçu de l'indice

Les index sont des structures de données permettant une récupération efficace des données.

2. Structure de l'indice 

B+Arbre

Hacher

3. Classement de l'indice 

Index de clé primaire, index unique, index régulier, index de texte intégral, index clusterisé, index secondaire.

4. Syntaxe de l'index

créer un index [unique] xxx sur xxx(xxx);

afficher l'index de xxxx ;

déposer l'index xxx sur xxxx ; 

5.Analyse des performances SQL 

Fréquence d'exécution, journal des requêtes lent, profil, explication.

6. Utilisation de l'index 

Index union, invalidation d'index, invite SQL, index de couverture, index de préfixe, index à colonne unique/joint.

7. Principes de conception des indices 

Tables, champs, index.


FIN 


Apprenez de : Programmeur Dark Horse - Cours de base de données MySQL

Je suppose que tu aimes

Origine blog.csdn.net/li13437542099/article/details/133280459
conseillé
Classement