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

L'index MySQL ralentit la requête

Il semble que article_id soit la clé primaire de la table des articles.

Puisque vous regroupez par article_id, MySQL doit renvoyer les enregistrements dans l'ordre de cette colonne, afin d'effectuer le GROUP BY.

Vous pouvez voir que sans l'index, il analyse tous les enregistrements de la table des articles, mais ils sont au moins classés par article_id, donc aucun tri ultérieur n'est requis. L'optimisation LIMIT peut être appliquée ici, puisqu'elle est déjà en ordre, elle peut simplement s'arrêter après avoir obtenu cinq lignes.

Dans la requête avec l'index sur tag.name, au lieu d'analyser l'intégralité de la table des articles, elle utilise l'index, mais par rapport à la table des balises, et commence là. Malheureusement, lors de cette opération, les enregistrements doivent ensuite être triés par article.article_id afin de compléter la clause GROUP BY. L'optimisation LIMIT ne peut pas être appliquée car elle doit renvoyer l'intégralité du jeu de résultats, puis l'ordonner, afin d'obtenir les 5 premières lignes.

Dans ce cas, MySQL se trompe.

Sans la clause LIMIT, je suppose que l'utilisation de l'index est plus rapide, ce qui est peut-être ce que MySQL supposait.