Mysql
 sql >> Base de données >  >> RDS >> Mysql

Performances MySQL :Index MySQL/MariaDB

Les données d'une base de données MySQL/MariaDB sont stockées dans des tables. Une façon simple de penser aux index consiste à imaginer une feuille de calcul étendue. Ce type de système n'est pas toujours propice à une recherche rapide; c'est là qu'un index devient essentiel. S'il n'y a pas d'index, le moteur de base de données doit commencer à la première ligne et parcourir toutes les lignes à la recherche des valeurs correspondantes. S'il s'agit d'une petite table, ce n'est pas grave, mais dans les grandes tables et les applications où il peut y avoir des tables avec des millions, voire des milliards de lignes, cela devient problématique. Comme vous pouvez l'imaginer, la recherche dans ces lignes une par une prendra du temps, même sur le matériel le plus récent. La solution consiste à créer un INDEX (ou plusieurs) pour vos données.

Qu'est-ce qu'un index ?

Un index est une table de recherche organisée qui contient des pointeurs vers l'endroit où les données peuvent être récupérées dans la base de données. Ce concept est similaire aux index de livres. Dans un livre, l'index répertorie les numéros de page où se trouvent divers sujets. Dans une base de données, l'index stocke des pointeurs qui sont dans un ordre logique et trié, permettant des recherches rapides dans la base de données. Imaginez un livre sans index. Si vous souhaitez rechercher des informations sur un sujet spécifique, vous devez commencer par le début et parcourir les pages jusqu'à ce que vous trouviez l'information que vous recherchez. Un index de livre résout ce problème en vous indiquant exactement à quelles pages se trouvent les informations que vous recherchez. C'est essentiellement ainsi que fonctionne un index MySQL.

Quand MySQL utilise-t-il les index ?

Chaque fois que le serveur de base de données doit rechercher des informations, il utilise un index pour accélérer le processus. Les clauses WHERE, JOIN ON, MIN/MAX et ORDER BY/GROUP BY en sont des exemples. Si vos requêtes vont rechercher ou correspondre à une colonne souvent dans l'une de ces situations, vous devriez envisager de créer un index.

Les index améliorent-ils les performances de la base de données ?

La plupart du temps, la réponse courte est oui. Pour les lectures et les recherches dans les données, les index augmentent considérablement les performances. Ne pas effectuer d'analyses complètes de la table améliorera à peu près n'importe quelle requête SELECT. Cela vient à un petit prix. Pour les colonnes qui sont souvent manipulées, il y a un coût pour chaque modification. Cela peut enliser les INSERTS et les UPDATE sur la base de données.

Types d'index MySQL courants

Il existe trois types courants d'index MySQL :

  • Clé primaire
  • Index
  • Unique

CLÉ PRIMAIRE

Une clé primaire indique au serveur de base de données quelle est la ou les colonnes les plus cruciales de la table. Généralement, ceci est utilisé pour les colonnes d'id auto_increment. Par exemple, si vous avez une table qui contient des informations sur les employés, vous voudriez une clé primaire sur la colonne "EMPLOYEE_ID". Dans d'autres tables, c'est-à-dire une table des salaires, vous feriez simplement référence à EMPLOYEE_ID au lieu de toutes les données de l'employé.

INDICE

Un INDEX standard est utilisé pour indiquer au serveur de base de données qu'une ou plusieurs des colonnes de la table vont faire l'objet de nombreuses recherches et qu'un index doit donc être créé sur celles-ci. Cela peut être construit lors de la création de la table ou si vous trouvez que vous avez besoin d'un index sur une colonne plus tard, il peut être ajouté ensuite.

UNIQUES

Un index UNIQUE est un peu distinct en ce sens qu'il impose des contraintes spécifiques sur ce qui peut être écrit dans la table. Si vous essayez d'insérer une ligne contenant une valeur déjà incluse dans les données, l'INSERT produira une erreur. Cela permet des recherches rapides ainsi qu'une certaine intégrité des données.

Comment créer un index

Il existe plusieurs façons de créer un index sur une colonne. Vous pouvez configurer un index lorsque vous CREATE TABLE, ou ultérieurement avec les instructions ALTER TABLE ou CREATE INDEX.

Création d'un index PRIMARY KEY

Le moyen le plus simple de créer un index PRIMARY KEY est de le faire lorsque vous créez la table. Nous utiliserons un exemple de table d'employés pour ce didacticiel. Le tableau aura trois colonnes :ID, FIRSTNAME et LASTNAME. La création peut ressembler à ceci :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32)
);

Cette instruction créera la table sans index. Nous pouvons ajouter la clé primaire avec une déclaration comme celle-ci :

ALTER TABLE EMPLOYEE
  ADD CONSTRAINT PRIMARY KEY (ID);

Cela indique à MySQL que nous avons une clé primaire sur l'ID de colonne.

Une façon plus simple de procéder consiste à créer la table. En recommençant, nous allons recréer la table et ajouter la clé primaire dans une instruction.

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

Cette instruction unique effectue les mêmes tâches que les deux premières instructions ci-dessus. Une clé primaire peut contenir plusieurs colonnes, mais les colonnes doivent toutes être uniques. La clé primaire peut être utilisée pour identifier n'importe quelle ligne individuelle dans le tableau.

Création d'un index à l'aide de CREATE INDEX

En utilisant le tableau d'exemple ci-dessus, imaginez que l'entreprise compte des milliers d'employés et que vous souhaitez pouvoir rechercher rapidement les employés par leur nom de famille. Avec une clé primaire, il ne peut y avoir qu'une seule entrée. Vous ne pouvez pas avoir plusieurs personnes qui ont le même identifiant d'employé. Avec les noms de famille, il est assez courant que plusieurs personnes partagent ce nom. Encore une fois, il existe plusieurs façons de procéder. En utilisant le tableau ci-dessus :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID)
);

Nous pouvons ajouter un index à la colonne LASTNAME comme ceci :

CREATE INDEX idx1 ON EMPLOYEE (LASTNAME);

Les recherches par LASTNAME seront désormais plus rapides sur ce tableau. Dans cet exemple, "idx1" est le nom de l'index. Cela facilitera le référencement de l'index lui-même à l'avenir si nécessaire.

Une autre façon d'ajouter un index à une table consiste à utiliser la commande ALTER TABLE. Pour accomplir la même chose que nous avons fait avec l'instruction précédente, nous exécutons la commande suivante :

ALTER TABLE EMPLOYEE ADD INDEX idx1 (LASTNAME);

La dernière façon d'ajouter un index qui permettrait de gagner du temps est de le faire pendant le CREATE TABLE. Si vous savez à l'avance que vous allez rechercher ou joindre une colonne spécifique, vous pouvez créer la table initiale avec l'index déjà présent :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx1 (LASTNAME)
);

Ces trois instructions créent le même résultat.

Index à plusieurs colonnes

Un index ne doit pas seulement être sur une seule colonne. Si nous voulons des recherches plus rapides sur FIRSTNAME et LASTNAME, nous pouvons créer un index sur les deux colonnes. Dans le tableau créé, cela ressemblerait à ceci :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  PRIMARY KEY (ID),
  INDEX idx2 (LASTNAME,FIRSTNAME)
);

Utilisation de la commande CRÉER INDEX :

CREATE INDEX idx2 ON EMPLOYEE (LASTNAME, FIRSTNAME);

Et enfin, la commande ALTER TABLE :

ALTER TABLE EMPLOYEE ADD INDEX idx2 (LASTNAME, FIRSTNAME);

Créer UN INDEX UNIQUE

Il peut arriver que vous souhaitiez créer un index sur une colonne et également forcer toutes les entrées de cette colonne à être uniques. Si nous avons étendu notre table d'exemple pour inclure une colonne OFFICE (indiquant quel bureau dans le bâtiment ils ont), alors nous voudrons peut-être en faire un index UNIQUE. Travaillons avec ce tableau :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR(32),
  LASTNAME CHAR(32),
  OFFICE INT,
  PRIMARY KEY (ID)
);

Notez que nous avons maintenant un nombre entier stocké dans la table pour indiquer le bureau occupé par la personne. Cela peut faire référence à une autre table, « BUREAUX », qui contiendra des informations sur les différents bureaux du bâtiment.

Pour créer un index à ce sujet, nous lancerions la commande suivante :

CREATE UNIQUE INDEX idx3 ON EMPLOYEE (OFFICE);

Vous pouvez utiliser des commandes similaires pour les créer dans les commandes CREATE TABLE et ALTER TABLE. Maintenant, si vous essayez d'exécuter ces deux insertions :

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (1, 'JANE', 'JOHNSON', 1);

INSERT INTO EMPLOYEE (ID, FIRSTNAME, LASTNAME, OFFICE) VALUES (2, 'JOHN', 'SMITH', 1);

Vous recevrez une erreur au deuxième INSERT :

Duplicate entry '1' for key 'idx3'

Supprimer un index

Il peut arriver un moment où vous ne voulez plus d'index sur une colonne. Vous vous êtes peut-être rendu compte que vous ne recherchez pas souvent une colonne et que l'index ralentit les insertions et les mises à jour. Pour ce faire, nous allons utiliser la commande DROP INDEX. Notre tableau a été créé comme ceci :

CREATE TABLE EMPLOYEE
(
  ID INT,
  FIRSTNAME CHAR,
  LASTNAME CHAR,
  PRIMARY KEY (ID),
  INDEX idx (LASTNAME,FIRSTNAME)
);

Si nous voulons supprimer l'index sur les colonnes LASTNAME et FIRSTNAME, nous lancerons cette commande :

DROP INDEX IDX ON EMPLOYEE;

Conclusion

Les index de base de données sont un outil fondamental qui optimise la vitesse de récupération des données au sein d'une structure qui tire parti des performances de recherche et de lecture dans une table. L'amélioration de l'index est principalement conduite au prix de plus d'écritures et/ou d'espace de stockage afin de maintenir une structure de données d'index optimale.

Les bases de données MySQL et MariaDB offrent plusieurs autres options de recherche et de lecture, dont beaucoup n'ont pas été couvertes ici. Voici les principaux points à retenir : 

  • Assurez-vous de prendre le temps de planifier vos tables à l'avance.
  • Si vous ne planifiez pas à l'avance lors de la création des tableaux, évaluez les colonnes les plus recherchées et créez un index pour celles-ci.

Regardez-le en action !

Notre large gamme de serveurs dédiés offre la puissance, la stabilité et la sécurité nécessaires pour héberger la plus petite base de données pour les entreprises en croissance jusqu'à une configuration de serveurs en cluster à haute disponibilité pour les plus grandes entreprises. Vous voulez voir quelles solutions nous pouvons offrir pour répondre à vos besoins?

Appelez-nous au 800.580.4985, ou ouvrez un chat ou un ticket avec nous pour parler avec l'un de nos conseillers expérimentés en solutions ou en hébergement expérimenté pour savoir comment vous pouvez tirer parti de cette technologie dès aujourd'hui !

Navigation des séries<
>