article
-id
-title
-status 1/2 index
tag
-id
-name
article_tags
-id
-articleId index
-tagId index
I chcę wyciągnąć 30 najczęściej dodawanych tagów gdzie artykuł ma status 1
SELECT t.name AS name, count(a_t.id) AS number FROM tags AS t LEFT JOIN article_tag AS a_t ON (a_t.tagId = t.id) LEFT JOIN article AS a ON (a.id = a_t.articleId) WHERE a.`status` = 1 GROUP BY t.id ORDER BY number DESC LIMIT 30
Ma ktoś może pomysł jak zoptymalizować to zapytanie? przy 30 000 artykułów o statusie 1 i 70 000 o statusie 2, 30 000 różnych tagów i 500 000 tysiącach wpisów w tabeli article_tags zapytanie trwa około 3.5 sekundy, co prawda wpada do cache na 15 minut, ale chciałbym je jakoś zoptymalizować.