【发布时间】:2013-10-02 05:06:09
【问题描述】:
SELECT * FROM foo f
INNER JOIN (
SELECT bar_id, MAX(revision_id) FROM bar b
GROUP BY bar_id
) t ON t.bar_id = f.bar_id
好的,所以听到这个问题:假设这些表中有数百万条记录,我希望查询尽可能高效。
MySQL 是否会提取 bar 表的所有记录,然后在连接级别的 ON 语句而不是子查询内部过滤它们?或者有没有办法在 JOIN 过滤器之前只用 SQL 过滤子查询中的项目?
查询所有记录以过滤它们似乎效率低下,我还没有想到解决这个问题的方法。
我试过了,但是子查询看不到 foo 表:
SELECT * FROM foo f
INNER JOIN (
SELECT bar_id, MAX(revision_id) FROM bar b
WHERE b.bar_id = f.bar_id
GROUP BY bar_id
) t ON t.bar_id = f.bar_id
有没有办法将 id 传递给子查询,我只是喜欢以最佳方式做事,我确信有办法做到这一点。
感谢所有回复。
【问题讨论】:
-
可以添加索引来提高性能
-
你也可以发布一个解释并显示创建表和记录数吗?
标签: mysql performance optimization join filter