indice

Les indices sont utilisés pour trouver rapidement les lignes qui ont une valeur spécifique dans une colonne.

Sans utiliser d'index, MySQL doit commencer à l'enregistrement 1 puis lire la table entière jusqu'à ce qu'il trouve la ligne pertinente. Plus la table est grande, plus cela prend du temps. Si la colonne interrogée dans la table possède un index, MySQL peut rapidement arriver au point où il recherche le milieu du fichier de données sans avoir à examiner toutes les données.

Bien sûr, il n'est pas facile d'avoir trop d'index. Plus on écrit d'index, plus la vitesse de modification est lente. Car lors de l'écriture de données modifiées, l'index doit également être modifié.

Les index sont divisés en index clusterisés et index clusterisés. Les index clusterisés sont classés en fonction de l'emplacement physique du stockage des données, mais les index clusterisés sont différents. La vitesse de récupération des lignes, tandis que l'index non clusterisé est rapide pour la récupération d'une seule ligne.

QQ截图20161009152415.png

QQ截图20161009152423.png


1. 🎜>Il s'agit de l'index le plus basique. Il n'a aucune restriction. Par exemple, l'index créé pour le champ de titre ci-dessus est un index normal. L'index de type BTREE par défaut dans MyIASM est également l'index que nous utilisons dans la plupart des cas. .

– créer un index directement

CREATE INDEX index_name ON table(column(length))
 –修改表结构的方式添加索引
 
 ALTER TABLE table_name ADD INDEX index_name ON (column(length))
 
 –创建表的时候同时创建索引
 
 CREATE TABLE `table` (
 
 `id` int(11) NOT NULL AUTO_INCREMENT ,
 
 `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
 
 `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
 
 `time` int(10) NULL DEFAULT NULL ,
 
 PRIMARY KEY (`id`),
 
 INDEX index_name (title(length))
 
 )


– supprimer un index

DROP INDEX index_name ON table


2. L'index unique

est similaire à un index normal, sauf que la valeur de la colonne d'index doit être unique, mais des valeurs nulles. sont autorisés (notez que les clés primaires et primaires sont différentes). S'il s'agit d'un index combiné, la combinaison des valeurs des colonnes doit être unique et la méthode de création est similaire à celle d'un index normal.

–创建唯一索引
 
 CREATE UNIQUE INDEX indexName ON table(column(length))
 
 –修改表结构
 
 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
 
 –创建表的时候直接指定
 
 CREATE TABLE `table` (
 
 `id` int(11) NOT NULL AUTO_INCREMENT ,
 
 `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
 
 `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
 
 `time` int(10) NULL DEFAULT NULL ,
 
 PRIMARY KEY (`id`),
 
 UNIQUE indexName (title(length))
 
 );

3. Index de texte intégral (FULLTEXT)

MySQL prend en charge l'indexation de texte intégral et la récupération de texte intégral à partir de la version 3.23. 23. L'index FULLTEXT n'est disponible que pour les tables MyISAM ; elles peuvent être créées à partir de colonnes CHAR, VARCHAR ou TEXT dans le cadre d'une instruction CREATE TABLE, ou ajoutées ultérieurement à l'aide de ALTER TABLE ou CREATE INDEX. ////Pour des ensembles de données plus volumineux, saisir vos données dans une table sans index FULLTEXT, puis créer l'index est plus rapide que de saisir les données dans un index FULLTEXT existant. Toutefois, n'oubliez pas que pour les tables de données de grande capacité, la génération d'index de texte intégral est un processus très long et gourmand en espace disque.

– Créer un tableau adapté à l'ajout d'un index de texte intégral

CREATE TABLE `table` (
 
 `id` int(11) NOT NULL AUTO_INCREMENT ,
 
 `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
 
 `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
 
 `time` int(10) NULL DEFAULT NULL ,
 
 PRIMARY KEY (`id`),
 
 FULLTEXT (content)
 
 );


– Modifier la structure du tableau pour ajouter un index de texte intégral


ALTER TABLE article ADD FULLTEXT index_content(content)


– Créer un index directement


CREATE FULLTEXT INDEX index_content ON article(content)

4. Index à une seule colonne, index à plusieurs colonnes

L'effet de requête de plusieurs index à une seule colonne et un seul index à plusieurs colonnes sont différents, car l'exécution lors de l'interrogation, MySQL ne peut utiliser qu'un seul index et sélectionnera l'index le plus restrictif parmi plusieurs index.

5. Index combiné (préfixe le plus à gauche)

Les instructions de requête SQL couramment utilisées ont généralement de nombreuses restrictions, donc afin de réduire davantage l'efficacité de MySQL, il est nécessaire d'envisager d'établir un index combiné. Par exemple, dans le tableau ci-dessus, un index combiné est créé pour le titre et l'heure : ALTER TABLE article ADD INDEX index_titme_time (title(50), time(10)). Établir un tel index combiné équivaut en fait à établir les deux ensembles d'index combinés suivants :

–titre, heure

–titre

Pourquoi n'y a-t-il pas d'index combiné comme l'heure ? Du drap de laine ? Ceci est le résultat du « préfixe le plus à gauche » de l'index composite MySQL. La compréhension simple est de commencer la combinaison uniquement à partir de celle la plus à gauche. Non seulement les requêtes contenant ces deux colonnes utiliseront l'index combiné, comme indiqué dans les SQL suivants :

–utilisez l'index ci-dessus

SELECT * FROM article WHREE title='测试' AND time=1234567890;
 
 SELECT * FROM article WHREE utitle='测试';


– ne le faites pas utilisez l'index ci-dessus

SELECT * FROM article WHREE time=1234567890;


Formation continue
||
<?php echo "Hello Mysql"; ?>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel