Cześć,
Mam takie zapytanie:
SELECT serieses_list.id,
(AVG(sr.story) + AVG(sr.graphics) + AVG(sr.music) + AVG(sr.characters)) / 4 AS middle
FROM serieses_list
JOIN serieses_tags ON serieses_tags.series_id = serieses_list.id
LEFT JOIN serieses_ratings AS sr ON sr.series_id = serieses_list.id
GROUP BY serieses_tags.series_id, serieses_tags.tag_id, sr.series_id, sr.user_id
HAVING SUM(IF(serieses_tags.tag_id = 1, 1, 0)) > 0
AND SUM(IF(serieses_tags.tag_id = 3, 1, 0)) > 0
AND SUM(IF(serieses_tags.tag_id = 6, 1, 0)) > 0
ORDER BY middle ASC
LIMIT 10 OFFSET 0
serieses_list
id |
name |
description |
cover |
type |
episode_number |
episode_length |
emission_statuas |
serieses_tags
id |
tag_id |
series_id |
serieses_ratings
id |
series_id |
user_id |
story |
graphics |
music |
characters |
1 |
16 |
1 |
8 |
7 |
9 |
6 |
Explain:
na ten moment w tabeli serieses_ratings jest ~28000 wierszy. Wykonanie tego zapytania trwa jakieś 1,5 sekundy. Co można zrobić żeby to jakoś zoptymalizować?
Edit: Poczytałem trochę o GROUP BY i udało mi się zbić czas wykonania do 900 ms