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

Comment optimiser les requêtes MySQL basées sur le plan EXPLAIN

Cela dépend de ce que vous recherchez et de la requête.

Généralement, pour chaque ligne dans EXPLAIN qui a un Using where , vous devez l'avoir en utilisant un index (possible keys et keys colonne). Ce sont vos filtres et incluent WHERE et ON. Qu'il dise Using index c'est encore mieux. Cela signifie qu'il existe un index de couverture, et MySQL peut récupérer les données directement à partir de l'index plutôt que de visiter la ligne dans les données de la table.

Les lignes où il n'y a pas de Using where , et il renvoie un grand nombre de lignes doit être examiné. Ce sont des valeurs de retour pour toutes les lignes de la table. Je ne sais pas quelle est votre question, donc je ne sais pas si je dois m'alarmer ici. Essayez de filtrer l'ensemble de résultats pour réduire la taille et améliorer les performances.

Vous devriez généralement essayer d'éviter de voir Using filesort ou Using temporary , même si ceux-ci ne sont mauvais que si vous ne les attendez pas.

Filesort apparaît généralement avec la clause ORDER. Vous souhaitez généralement que MySQL utilise un index de couverture (Using index ) afin que les lignes soient déjà renvoyées dans l'ordre par le serveur. Si ce n'est pas le cas, MySQL doit les commander par la suite, en utilisant filesort.

Using temporary peut être mauvais lorsqu'il fait référence à des tables dérivées car elles n'ont pas d'index. Il semble que vous ayez explicitement créé une table temporaire avec des index, donc ici, ce n'est pas mal. Parfois, votre seul choix est d'utiliser une table dérivée, et donc Using temporary .