有人可以解釋爲什麼由子查詢添加組,使此查詢需要很長時間(30secs):我該如何優化這個MySQL查詢?
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)
如果我「按組」中刪除(和增加子查詢的結果),它需要0.07秒:
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)
在子查詢中沒有外部引用,所以它只能執行一次,對嗎?自行執行:
SELECT sources.musical_work_id FROM sources GROUP BY sources.musical_work_id HAVING COUNT(sources.musical_work_id) > 8
只需要0.01秒。
任何解釋?有關如何改變它的任何建議?
是什麼的'SOURCES'表的表引擎?我最近在讀,MyISAM在InnoDB中用GROUP BY不能很好地執行。 – 2010-09-14 20:16:26
哪些列有索引? – ikanobori 2010-09-14 20:19:23
將這個組逐具有-計數-GT-8中一個臨時表查詢,並看到超查詢的行爲方式。 – 2010-09-14 20:20:17