Maison > Article > base de données > MySQL peut-il créer un index commun ?
mysql peut créer des index conjoints. MySQL permet aux utilisateurs de créer un index commun contenant jusqu'à 16 colonnes. Il existe deux méthodes de création : 1. Créer lors de la création d'une table, la syntaxe "CREATE TABLE nom de la table (nom de colonne 1 type PRIMARY KEY, nom de colonne 2 type, nom de colonne 3 type, ...INDEX nom d'index (nom de colonne 2, nom de colonne 3...));"; 2. Créer lors de la modification de la table, la syntaxe "CREATE INDEX nom d'index ON nom de table (nom de colonne 2, nom de colonne 3, nom de colonne 4 );".
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Qu'est-ce qu'un indice commun ? L'essence d'un index conjoint : l'index correspondant le plus à gauche sur deux colonnes ou plus est appelé index conjoint, et un index conjoint est également appelé index composite. MySQL permet aux utilisateurs de créer un index composite contenant jusqu'à 16 colonnes. Pour les index composites : Mysql utilise les champs de l'index de gauche à droite. Une requête ne peut utiliser qu'une partie de l'index, mais uniquement la partie la plus à gauche.
Par exemple, l'index est
. Il peut prendre en charge trois combinaisons de a | a, b | a, b, c pour la recherche, mais il ne prend pas en charge b, c pour la recherche. l'index est très efficace.L'optimiseur de requêtes utilise des index composites pour les requêtes qui testent toutes les colonnes de l'index, ou les requêtes qui testent la première colonne, les deux premières colonnes, etc. key index (a,b,c)
Un seul index composite peut accélérer ces types de requêtes sur la même table si vous spécifiez les colonnes dans le bon ordre dans la définition de l'index.
Syntaxe : CREATE TABLE 表名 (
c1 data_type PRIMARY KEY,
c2 data_type,
c3 data_type,
c4 data_type,
INDEX 索引名 (c2,c3,c4)
);
Dans cette syntaxe, l'index conjoint se compose de trois colonnes c2, c3 et c4.
Vous pouvez ajouter un index composite à une table existante à l'aide de l'instruction CREATE INDEX suivante : CREATE INDEX 索引名
ON 表名(c2,c3,c4);
Veuillez noter que si vous avez un index composite sur (c1, c2, c3 ), vous La fonction de recherche d'index sera construite sur l'une des combinaisons de colonnes suivantes :
(c1) (c1,c2) (c1,c2,c3)
Par exemple :
SELECT * FROM table_name WHERE c1 = v1; SELECT * FROM table_name WHERE c1 = v1 AND c2 = v2; SELECT * FROM table_name WHERE c1 = v1 AND c2 = v2 AND c3 = v3;
Si les colonnes ne forment pas le préfixe le plus à gauche de l'index, l'optimiseur de requêtes ne peut pas utiliser l'index pour effectuer une recherche. Par exemple, la requête suivante ne peut pas être trouvée à l'aide de composites :
SELECT * FROM table_name WHERE c1 = v1 AND c3 = v3;
Exemple d'index syndical MySQL
Nous allons démontrer l'utilisation de la table des employés de l'exemple de base de données.
L'instruction suivante crée un index conjoint sur les colonnes lastName et firstName :CREATE INDEX name ON employees(lastName, firstName);
Tout d'abord, l'index de nom peut être utilisé pour les recherches dans les requêtes qui spécifient la valeur lastName, car la colonne lastName est le préfixe le plus à gauche de l'indice.
Deuxièmement, l'index de nom peut être utilisé pour interroger la valeur de la combinaison des valeurs lastName et firstName.
index de nom est utilisé pour rechercher dans les requêtes suivantes :
SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson';
Cette requête utilise l'index de nom car le préfixe le plus à gauche de l'index (c'est-à-dire la colonne lastName) est utilisé pour la recherche.
Vous pouvez le vérifier en ajoutant la clause EXPLAIN à la requête :
EXPLAIN SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson';
Voici le résultat :
2) Recherchez les employés portant le nom Patterson et le prénom Steve :SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson' AND firstName = 'Steve';Dans cette requête, les deux Les colonnes lastName et firstName sont utilisées pour les recherches, elles utilisent donc l'index de nom.
Vérifions ça :
EXPLAIN SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson' AND firstName = 'Steve';
Le résultat est :
3) Rechercher des employés dont le nom de famille est Patterson et dont le prénom est Steve ou Mary :SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson' AND (firstName = 'Steve' OR firstName = 'Mary');Cette requête est similaire à la deuxième requête avec deux Les colonnes lastName et firstName sont utilisées pour les recherches.
L'instruction suivante vérifie l'utilisation de l'index :
EXPLAIN SELECT firstName, lastName, email FROM employees WHERE lastName = 'Patterson' AND (firstName = 'Steve' OR firstName = 'Mary');
Le résultat est :
L'optimiseur de requête ne peut pas utiliser l'index de nom pour les recherches dans la requête suivante, car seule la colonne où firstName n'est pas le préfixe le plus à gauche de l'index est utilisé :SELECT firstName, lastName, email FROM employees WHERE firstName = 'Leslie';Similaire Malheureusement, l'optimiseur de requête ne peut pas utiliser l'index de nom pour la recherche dans la requête suivante car les colonnes firstName ou lastName sont utilisées pour la recherche.
SELECT firstName, lastName, email FROM employees WHERE firstName = 'Anthony' OR lastName = 'Steve';
【Recommandations associées :
tutoriel vidéo mysql】
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!