SQL中JOIN与子查询的优劣

发布于 2022-08-24 13:26:38 字数 197 浏览 17 评论 0

我是个MySQL新手,在涉及多表查询时,喜欢使用子查询,简单易懂。

SELECT * FROM *** WHERE id IN (SELECT ***);

但也发现很多人用JOIN同样能实现查询结果,我想知道JOIN相比子查询,在性能方面有什么优势吗?
我该如何理解JOIN语句呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

原来是傀儡 2022-08-31 13:26:38

对于mysql,从来都不推荐使用子查询和join。因为本身join的效率就是硬伤,一旦数据量上去效率很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。

梦晓ヶ微光ヅ倾城 2022-08-31 13:26:38

as described on stackoverflow.http://stackoverflow.com/questions/38...

7 down vote accepted

I would EXPECT the first query to be quicker, mainly because you have an equivalence and an explicit JOIN. In my experience IN is a very slow operator, since SQL normally evaluates it as a series of WHERE clauses separated by "OR" (WHERE x=Y OR x=Z OR...).

As with ALL THINGS SQL though, your mileage may vary. The speed will depend a lot on indexes (do you have indexes on both ID columns? That will help a lot...) among other things.

The only REAL way to tell with 100% certainty which is faster is to turn on performance tracking (IO Statistics is especially useful) and run them both. Make sure to clear your cache between runs!

别靠近我心 2022-08-31 13:26:38

子查询就别用了,效率太差,如果是JOIN的话,它是走嵌套查询的。小表驱动大表,且通过索引字段进行关联。如果表记录比较少的话,还是OK的。大的话业务逻辑中可以控制处理。

我没有仔细了解过其中的差异,不过对于数据比较少(压力不大)的情况,两种都是可用的,估计性能差不了多少;对于数据量大的情况下,JOIN和子查询都是不可接受的,需要额外的优化(比如用nosql做缓存什么的)。

ζ澈沫 2022-08-31 13:26:38

我觉得小数据量无所谓,大数据量又不会用这种办法了。

独木成林 2022-08-31 13:26:38

小数据量无所谓,大数据量下还是极力避免吧。

等待我真够勒 2022-08-31 13:26:38

http://chaous.com/MySQL/2012/03/27/my...

关于MySQL IN运算之前写过一篇文章,希望对LZ有用。

至于怎么理解JOIN查询,推荐LZ一本书 http://book.douban.com/subject/105696...

愚人国度 2022-08-31 13:26:38

具体性能我不清楚。不过我看别人说,是用join代替子查询。

败给现实 2022-08-31 13:26:38

通常用join
如果是做分析就用join

咽泪装欢 2022-08-31 13:26:38

图片描述


我也很困惑,上图中的两个sql查询结果居然不一样

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文