Có vẻ như article_id là khóa chính cho bảng bài viết.
Vì bạn đang nhóm theo article_id, nên MySQL cần trả về các bản ghi theo thứ tự của cột đó, để thực hiện GROUP BY.
Bạn có thể thấy rằng không có chỉ mục, nó sẽ quét tất cả các bản ghi trong bảng bài viết, nhưng chúng ít nhất theo thứ tự theo article_id, vì vậy không cần sắp xếp sau. Tối ưu hóa LIMIT có thể được áp dụng ở đây, vì nó đã có thứ tự, nó chỉ có thể dừng lại sau khi đạt được năm hàng.
Trong truy vấn với chỉ mục trên tag.name, thay vì quét toàn bộ bảng bài viết, nó sử dụng chỉ mục, nhưng dựa trên bảng thẻ và bắt đầu ở đó. Thật không may, khi thực hiện việc này, các bản ghi sau đó phải được sắp xếp theo article.article_id để hoàn thành mệnh đề GROUP BY. Không thể áp dụng tối ưu hóa LIMIT vì nó phải trả về toàn bộ tập hợp kết quả, sau đó sắp xếp thứ tự để có được 5 hàng đầu tiên.
Trong trường hợp này, MySQL chỉ đoán sai.
Nếu không có mệnh đề LIMIT, tôi đoán rằng việc sử dụng chỉ mục sẽ nhanh hơn, đó có thể là những gì MySQL đã đoán.