Wygląda na to, że article_id jest kluczem podstawowym dla tabeli artykułów.
Ponieważ grupujesz według identyfikatora artykułu, MySQL musi zwrócić rekordy w kolejności według tej kolumny, aby wykonać funkcję GROUP BY.
Możesz zobaczyć, że bez indeksu skanuje wszystkie rekordy w tabeli artykułów, ale są one przynajmniej uporządkowane według identyfikatora_artykułu, więc późniejsze sortowanie nie jest wymagane. Można tutaj zastosować optymalizację LIMIT, ponieważ jest już w porządku, może po prostu zatrzymać się po uzyskaniu pięciu wierszy.
W zapytaniu z indeksem tag.name, zamiast skanować całą tabelę artykułów, wykorzystuje indeks, ale w odniesieniu do tabeli tagów i tam zaczyna. Niestety, robiąc to, rekordy muszą być później posortowane według article.article_id w celu uzupełnienia klauzuli GROUP BY. Optymalizacja LIMIT nie może być zastosowana, ponieważ musi zwrócić cały zestaw wyników, a następnie zamówić go, aby uzyskać pierwsze 5 wierszy.
W tym przypadku MySQL po prostu źle zgaduje.
Bez klauzuli LIMIT zgaduję, że użycie indeksu jest szybsze, co być może zgadywał MySQL.