Tout au long de ce didacticiel, nous aborderons certains des principes fondamentaux de l'indexation. Dans le cadre de la série MySQL, nous présenterons les fonctionnalités d'indexation MySQL et le rôle qu'elle joue dans l'optimisation des performances de la base de données. Liquid Web recommande de consulter un administrateur de base de données avant d'apporter des modifications à votre application au niveau de la production.
Qu'est-ce que l'indexation ?
L'indexation est une structure puissante de MySQL qui peut être exploitée pour obtenir les temps de réponse les plus rapides à partir de requêtes courantes. Les requêtes MySQL gagnent en efficacité en générant une table plus petite, appelée index, à partir d'une colonne ou d'un ensemble de colonnes spécifié. Ces colonnes, appelées clé, peuvent être utilisées pour renforcer l'unicité. Vous trouverez ci-dessous une visualisation simple d'un exemple d'index utilisant deux colonnes comme clé.
+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+
Les requêtes utilisent des index pour identifier et récupérer les données ciblées, même s'il s'agit d'une combinaison de clés. Sans index, l'exécution de la même requête entraîne une inspection de chaque ligne pour les données nécessaires. L'indexation produit un raccourci, avec des temps de requête beaucoup plus rapides sur des tables volumineuses. Une analogie avec les manuels peut fournir un autre moyen courant de visualiser le fonctionnement des index.
Quand activer l'indexation ?
L'indexation n'est avantageuse que pour les grandes tables contenant des informations régulièrement consultées. Par exemple, pour continuer avec notre analogie avec les manuels scolaires, cela n'a aucun sens d'indexer un livre de contes pour enfants avec seulement une douzaine de pages. Il est plus efficace de simplement lire le livre pour trouver chaque occurrence du mot « tortue » que de créer et de maintenir des index, d'interroger ces index, puis de passer en revue chaque page fournie. Dans le monde informatique, ces tâches supplémentaires entourant l'indexation représentent des ressources gaspillées qu'il serait préférable de ne pas indexer.
Sans index, lorsque les tables grossissent dans des proportions énormes, les temps de réponse souffrent des requêtes ciblant ces tables obtuses. Les requêtes inefficaces se manifestent par une latence dans les performances de l'application ou du site Web. Nous identifions généralement cette latence en utilisant la fonctionnalité de journal des requêtes lentes de MySQL. Vous pouvez trouver plus de détails sur l'utilisation de la fonctionnalité de journal des requêtes lentes dans le premier article de cette série :Performances MySQL :identifier les requêtes longues.
Une fois qu'une table colossale atteint son point de basculement, elle atteint le potentiel de temps d'arrêt pour les applications et les sites Web. . La réalisation d'évaluations de routine pour la croissance de la base de données établit des performances optimales de la base de données et évite les interruptions inhérentes aux longues requêtes.
Avantages et inconvénients de l'indexation MySQL
L'utilisation de l'indexation MySQL présente des avantages et des inconvénients, et nous discuterons des avantages et des inconvénients importants pour votre considération. Ces aspects vous guideront pour décider si l'indexation est un choix approprié à votre situation.
Quelles informations indexe-t-on ?
La sélection des éléments à indexer est probablement la partie la plus difficile de l'indexation de vos bases de données. Déterminer ce qui est suffisamment important pour être indexé et ce qui est suffisamment bénin pour ne pas être indexé. De manière générale, l'indexation fonctionne mieux sur les colonnes qui font l'objet des clauses WHERE dans vos requêtes couramment exécutées. Considérez le tableau simplifié suivant :
ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...
Si vos requêtes reposent sur le test de la clause WHERE à l'aide de LAST_NAME et FIRST_NAME, l'indexation par ces deux colonnes augmenterait considérablement les temps de réponse des requêtes. Alternativement, si vos requêtes reposent sur une simple recherche d'ID, l'indexation par ID serait le meilleur choix.
Ces exemples ne sont qu'un exemple rudimentaire et il existe plusieurs types de structures d'indexation intégrées à MySQL. La page MySQL suivante traite de ces types d'index plus en détail, et une lecture recommandée pour tous ceux qui envisagent l'indexation :Comment MySQL utilise les index
Qu'est-ce qu'un index unique ?
Un autre point à prendre en compte lors de l'évaluation des colonnes à utiliser comme clé dans votre index est de savoir s'il faut utiliser la contrainte UNIQUE. La définition de la contrainte UNIQUE appliquera l'unicité en fonction de la clé d'indexation configurée. Comme pour toute clé, il peut s'agir d'une seule colonne ou d'une concaténation de plusieurs colonnes. La fonction de cette contrainte garantit qu'il n'y a pas d'entrées en double dans la table en fonction de la clé configurée.
Qu'est-ce qu'un index de clé primaire ?
Aussi couramment invoquée que la contrainte UNIQUE, la CLÉ PRIMAIRE est utilisée pour optimiser les index. Cette contrainte garantit que la CLÉ PRIMAIRE désignée ne peut pas avoir une valeur nulle. Par conséquent, une amélioration des performances se produit lors de l'exécution sur un moteur de stockage InnoDB pour la table en question. Cette augmentation est due à la façon dont InnoDB stocke physiquement les données, en plaçant des lignes à valeur nulle dans la clé hors séquence contiguë avec des lignes qui ont des valeurs. L'activation de cette contrainte garantit que les lignes du tableau sont conservées dans un ordre contigu pour des réponses plus rapides.
Gestion des index
Nous allons maintenant couvrir certaines des bases de la manipulation des index à l'aide de la syntaxe MySQL. Dans les exemples, nous inclurons la création, la suppression et la liste des index. Gardez à l'esprit que ces exemples ont des entrées d'espace réservé pour les mots-clés spécifiques. Ces mots-clés sont explicites par nature pour une lecture facile, et vous en trouverez ci-dessous un aperçu.
Répertorier/Afficher les index
Les tables peuvent avoir plusieurs index. La gestion des index nécessitera inévitablement de pouvoir lister les index existants sur une table. La syntaxe pour afficher un index est ci-dessous.
SHOW INDEX FROM tableName;
Création d'index
La création d'index a une syntaxe simple. La difficulté consiste à déterminer quelles colonnes doivent être indexées et si l'application de l'unicité est nécessaire. Ci-dessous, nous allons illustrer comment créer des index avec et sans les contraintes PRIMARY KEY et UNIQUE.
Comme mentionné précédemment, les tables peuvent avoir plusieurs index. L'indexation multiple est utile pour créer des index adaptés aux requêtes requises par votre application ou votre site Web. Les paramètres par défaut autorisent jusqu'à 16 index par table, augmentez ce nombre mais c'est généralement plus que nécessaire. Les index peuvent être créés lors de la création d'une table ou ajoutés à la table en tant qu'index supplémentaires ultérieurement. Nous allons passer en revue les deux méthodes ci-dessous.
Exemple :créer une table avec un index standard
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);
Exemple :créer une table avec un index unique et une clé primaire
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);
Exemple :Ajouter un index à une table existante
CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);
Exemple :Ajouter un index à une table existante avec une clé primaire
CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);
Suppression d'index
Lors de la gestion des index, il peut s'avérer nécessaire d'en supprimer certains. La suppression d'index est également un processus très simple, voir l'exemple ci-dessous :
DROP INDEX indexName ON tableName;
Il existe de nombreuses façons d'optimiser votre base de données pour une véritable efficacité. Si vous souhaitez en savoir plus ou convertir les types de moteurs de recherche disponibles dans MySQL, lisez notre tutoriel MyISAM vs. InnoDB. Ou si vous avez besoin de bases de données performantes, consultez notre page produit MySQL pour afficher différentes options.