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

Comment utiliser les index pour améliorer les performances des requêtes MySQL

Cet article traite des index et de la manière dont vous pouvez les utiliser pour améliorer les performances des requêtes de la base de données MySQL.

Performances et index de la base de données

Les index de base de données dans MySQL vous permettent d'accélérer les performances de SELECT déclarations de requête. Pour les petites tables, un index n'aide pas beaucoup. Cependant, si vous avez des tables avec une grande quantité de données, les index peuvent considérablement améliorer les performances.

Les comportements suivants indiquent tous que les tables peuvent bénéficier de l'ajout d'index :

  • Votre site se charge très lentement ou pas du tout.
  • Une application ne parvient pas à se connecter à sa base de données.
  • Les requêtes de base de données sont sauvegardées.

Si vous rencontrez l'un de ces problèmes, vous devez analyser vos requêtes de base de données et envisager d'ajouter des index.

Si vous avez un VPS géré ou un serveur dédié géré, une taille de tampon de tri accrue peut également être utile en plus de l'ajout d'index. Veuillez ouvrir un ticket sur le portail client à l'adresse https://my.a2hosting.com pour discuter de cette option avec notre Guru Crew.

Analyse des requêtes de base de données

Pour déterminer quelles tables peuvent bénéficier de l'utilisation d'index, vous devez analyser vos requêtes de base de données. Le EXPLAIN SELECT déclaration vous aide à le faire. Pour analyser les requêtes de base de données, procédez comme suit :

  1. Connectez-vous à votre compte à l'aide de SSH.
  2. À l'invite de commande, saisissez la commande suivante en remplaçant nom d'utilisateur avec le nom d'utilisateur de votre compte d'hébergement A2 et votre base de données avec le nom de la base de données :
    mysql -u username -p database
  3. À l'invite Entrer le mot de passe, saisissez votre mot de passe. L'invite mysql> s'affiche.
  4. Tapez la commande SQL suivante :

    EXPLAIN SELECT * FROM table_name WHERE conditions \G
    
    Si vous écrivez votre propre code d'application, vous connaissez déjà le SELECT instructions que vous utilisez pour récupérer des données. Si vous utilisez une application tierce, telle que WordPress ou PrestaShop, vous devrez peut-être examiner le code source ou les journaux de base de données pour déterminer le SELECT exact instructions utilisées pour récupérer des données.
  5. Sortie de EXPLAIN SELECT indique comment l'optimiseur de requête MySQL exécutera la requête. Par exemple, considérez la sortie suivante :

    mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: employees
             type: ALL
    possible_keys: NULL
              key: NULL
          key_len: NULL
              ref: NULL
             rows: 142
            Extra: Using where
    1 row in set (0.00 sec)
    

    Dans cet exemple de sortie :

    • Les possible_keys et clé les valeurs sont toutes les deux NULL , ce qui indique que MySQL n'a pas d'index qu'il peut utiliser pour cette requête.
    • Les lignes indique que MySQL lira 142 lignes pour cette requête. S'il y a 142 lignes au total dans la table, cela signifie que MySQL doit examiner chaque ligne pour générer le jeu de résultats. Cela peut prendre un certain temps pour une grande table.

    D'autre part, si nous devions créer un index appelé index_name pour le nom de famille colonne, MySQL peut générer la sortie suivante pour la même requête :

    mysql> EXPLAIN SELECT title FROM employees WHERE lastname LIKE 'T%' \G
    *************************** 1. row ***************************
               id: 1
      select_type: SIMPLE
            table: employees
             type: range
    possible_keys: index_name
              key: index_name
          key_len: 22
              ref: NULL
             rows: 17
            Extra: Using where; Using index
    1 row in set (0.00 sec)
    

    Comme vous pouvez le voir, les possible_keys et clé les valeurs indiquent que MySQL a trouvé un index qu'il peut utiliser pour optimiser la requête. De plus, MySQL ne lira que 17 lignes pour générer le jeu de résultats, au lieu des 142 lignes. (Cela signifie que le tableau comporte 17 lignes où le nom de famille commence par "T".) Enfin, le Extra indique également que MySQL utilisera un index pour la requête.

Ajouter, supprimer et afficher des index dans une table

Après avoir analysé vos requêtes de base de données et déterminé où se situent les goulots d'étranglement des performances, vous êtes prêt à ajouter des index. Pour ce faire, suivez ces étapes :

  1. Connectez-vous à votre compte à l'aide de SSH.
  2. À l'invite de commande, saisissez la commande suivante en remplaçant nom d'utilisateur avec le nom d'utilisateur de votre compte d'hébergement A2 et votre base de données avec le nom de la base de données :
    mysql -u username -p database
  3. À l'invite Entrer le mot de passe, saisissez votre mot de passe. L'invite mysql> s'affiche.
  4. Pour ajouter un index à une table, tapez la commande SQL suivante. Remplacer table_name avec le nom de la table, index_name avec le nom du nouvel index (qui peut être ce que vous voulez), et table_column avec le nom de la colonne de table pour laquelle vous souhaitez ajouter l'index :

    ALTER TABLE table_name ADD INDEX index_name (table_column);
    
    Bien que les index puissent améliorer les performances, ils peuvent également avoir un impact négatif sur les performances s'ils sont trop nombreux. En effet, plus une table a d'index, plus MySQL doit travailler pour les maintenir à jour. L'astuce consiste à trouver le bon équilibre entre un nombre suffisant d'index pour améliorer les performances, mais pas au point d'avoir un impact négatif sur les performances.
  5. Pour supprimer un index d'une table, tapez la commande SQL suivante. Remplacer table_name par le nom de la table, et remplacez index_name avec le nom de l'index que vous souhaitez supprimer :

    ALTER TABLE table_name DROP INDEX index_name;
    
  6. Pour afficher tous les index d'une table, tapez la commande SQL suivante. Remplacer table_name avec le nom de la table :

    SHOW INDEX FROM table_name \G
    
    Après avoir créé un index, vous devez utiliser le EXPLAIN SELECT à nouveau pour voir comment les requêtes sont affectées. En outre, vous devez continuer à surveiller les performances de la base de données pour voir s'il y a des améliorations. Vous devrez peut-être exécuter une série de tests pour trouver le nombre optimal d'index pour votre base de données.

Plus d'informations

  • Pour plus d'informations sur l'optimisation et les index MySQL, veuillez consulter https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html.
  • Pour plus d'informations sur EXPLIQUER déclaration, veuillez visiter https://dev.mysql.com/doc/refman/5.5/en/explain.html.