有人可以解释为什么子查询添加组使得此查询需要这么长时间(30秒):
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)
Run Code Online (Sandbox Code Playgroud)
如果我删除'group by'(并增加子查询的结果),则需要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)
Run Code Online (Sandbox Code Playgroud)
子查询中没有外部引用,因此它只应执行一次,对吧?自己执行:
SELECT sources.musical_work_id FROM sources GROUP BY sources.musical_work_id HAVING COUNT(sources.musical_work_id) > 8
Run Code Online (Sandbox Code Playgroud)
只需0.01秒.
有什么解释吗?有关如何改变它的任何建议?
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |