有人可以解释为什么由子查询添加组,使此查询需要很长时间(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