Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Index verlangsamt die Abfrage

Es scheint, dass article_id der Primärschlüssel für die Artikeltabelle ist.

Da Sie nach article_id gruppieren, muss MySQL die Datensätze in der Reihenfolge dieser Spalte zurückgeben, um GROUP BY auszuführen.

Sie können sehen, dass ohne den Index alle Datensätze in der Artikeltabelle gescannt werden, aber sie sind zumindest nach Artikel-ID geordnet, sodass keine spätere Sortierung erforderlich ist. Die LIMIT-Optimierung kann hier angewendet werden, da sie bereits in Ordnung ist, kann sie einfach aufhören, nachdem sie fünf Zeilen erhalten hat.

In der Abfrage mit dem Index auf tag.name wird, anstatt die gesamte Artikeltabelle zu scannen, der Index verwendet, jedoch gegen die Tag-Tabelle, und dort begonnen. Leider müssen dabei die Datensätze später nach article.article_id sortiert werden, um die GROUP BY-Klausel zu vervollständigen. Die LIMIT-Optimierung kann nicht angewendet werden, da sie die gesamte Ergebnismenge zurückgeben und dann ordnen muss, um die ersten 5 Zeilen zu erhalten.

In diesem Fall rät MySQL einfach falsch.

Ohne die LIMIT-Klausel vermute ich, dass die Verwendung des Index schneller ist, was MySQL vielleicht vermutet hat.