很多公司都禁止程序员在 SQL 中使用 JOIN,至于原因则出奇的一致:用 JOIN 慢。不过我从没见过谁来论证为什么 JOIN 慢,反倒是这个人云亦云的结论越传越广,让我觉得是时候来讨论一下这个看似正确的结论了。举个例子:查询最新的十篇帖子和对应的用户信息,用 JOIN 是这样的:SELECT posts.id, posts.content, users.name, ...
FROM posts
JOIN users on posts.user_id = users.id
ORDER BY posts.created_at DESC
LIMIT 10如果不使用 JOIN 的话,那么大概会改写成如下两条 SQL:SELECT id, content, ...
FROM posts
ORDER BY created_at DESC
LIMIT 10
SELECT name, ...
FROM users
WHERE id in (...)第一次查询得到帖子数据,然后在程序代码里收集好想要的 user_id,第二次查询通过 user_id 得到用户数据,接着在程序代码里把两份数据组合起来。哪个快?我就不用跑个 bench 了吧,肯定是用 JOIN 的快!JOIN在我看来,JOIN 的问题不是性能,而是当你执行 posts JOIN users 的时候,实际上相当于做出了一个假设:po
...
继续阅读
(21)