
Mam problem z jednym zapytaniem, służącym do pobrania 60 najczęściej używanych tagów w danym forum.
Początkowo zapytanie wyglądało tak:
SELECT g.tag_name AS tagus FROM phpbb_topics t, phpbb_tags g, phpbb_tag_match m WHERE t.forum_id = $forum_id AND m.tagm_topic_id = t.topic_id AND g.tag_id = m.tagm_tag_id GROUP BY tagus ORDER BY COUNT(g.tag_name) DESC LIMIT 60
Zapytanie działało, ale przy pierwszym jego wykonaniu czas zapytania leciał nawet do 1 sek (potem MySQL trzymał już wynik w cachu zapewne).
Postanowiłem nieco przerobić tabelę phpbb_tag_match i dodać w niej, obok id tematu, również id forum, w którym się ono znajduje:
SELECT g.tag_name FROM phpbb_tags g, phpbb_tag_match m WHERE m.tagm_forum_id = $forum_id AND g.tag_id = m.tagm_tag_id GROUP BY g.tag_name ORDER BY COUNT(g.tag_name) DESC LIMIT 60
To zapytanie również działa bezproblemowo, ale również straszy brakiem wydajności, gdyż czas generowania potrafi urosnąć nawet do 0.6 s.
Podejrzewam, że problemem jest tutaj grupowanie i sortowanie wyników, ale nie potrafię tego rozgryźć.
Z góry dziękuję za pomoc.
Pozdrawiam.