有人可以解释为什么子查询添加组使得此查询需要这么长时间(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秒.
有什么解释吗?有关如何改变它的任何建议?
我在pytables中有一个包含300多列的数据集,我希望能够轻松选择不同的子集.似乎没有一个非常优雅的解决方案,或者有什么我想念的?
我也很高兴有一种方法可以创建另一个表,它简单地对原始表中的选择列进行别名,这样我就可以拥有我的主表,然后是我的子集teables.有没有办法做到这一点?