Hello, can someone please explain why the addition of the group by subquery makes this query takes so long (30secs):
SELECT *
FROM aggregate_songlist AS a
INNER JOIN musical_works AS m
ON a.musical_work_id = m.id
WHERE m.genre='rock' AND m.id NOT IN
(SELECT sources.musical_work_id FROM sources GROUP BY sources.musical_work_id HAVING COUNT(sources.musical_work_id) > 8)
If I remove the 'group by' (and increasing the results of the subquery) it takes 0.07 seconds:
SELECT *
FROM aggregate_songlist AS a
INNER JOIN musical_works AS m
ON a.musical_work_id = m.id
WHERE m.genre='rock' AND m.id NOT IN
(SELECT sources.musical_work_id FROM sources)
There are no outer references in the subquery, so it should only be executed once, right? Executing it on its own:
SELECT sources.musical_work_id FROM sources GROUP BY sources.musical_work_id HAVING COUNT(sources.musical_work_id) > 8
takes only 0.01 seconds.
Any explanations? Any suggestions of how to change it?