关闭

SQL里是否可以使用JOIN

发表于:2016-12-21 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:火丁笔记    来源:51Testing软件测试网采编

  很多公司都禁止程序员在 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 的时候,实际上相当于做出了一个假设:posts 和 users 两个表将在同一个 DB 实例上永结同心,以后无论贫穷还是富有,疾病还是健康,永不分离。不过实际上,随着项目的发展,很可能会出现 posts 和 users 两个表被划分到不同 DB 实例的情况,一旦出现此类情况,那么当初使用 JOIN 的地方将不得不大量改写。
  下次如果大家再听到别人人以性能为由反对 JOIN 的使用,那么不妨把本文的链接发给他,因为他多半没由搞清楚真正的原因是什么。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号