Maison  >  Article  >  base de données  >  MySQL peut-il créer un index commun ?

MySQL peut-il créer un index commun ?

青灯夜游
青灯夜游original
2022-06-15 16:22:425922parcourir

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 );".

MySQL peut-il créer un index commun ?

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.

Créer un index conjoint lors de la création d'une table

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.

Créez un index conjoint lors de la modification d'une table

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);
MySQL peut-il créer un index commun ?

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 :

  • 1) Rechercher des employés portant le nom de famille Patterson
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';
MySQL peut-il créer un index commun ?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');
MySQL peut-il créer un index commun ?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';
MySQL peut-il créer un index commun ?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!

Déclaration:
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