加入与子查询

加入与子查询

我是一个老派的MySQL用户,并且总是优先JOIN于子查询。但是现在每个人都使用子查询,我讨厌它; 我不知道为什么。

如果存在任何差异,我缺乏理论知识来判断自己。子查询是否与a一样好JOIN,因此没有什么可担心的?


胡子哥哥
浏览 728回答 4
4回答

茅侃侃

摘自MySQL手册(13.2.10.11重写子查询作为连接):LEFT [OUTER] JOIN可以比等效的子查询更快,因为服务器可能能够更好地优化它 - 这一事实并非仅针对MySQL Server。因此子查询可能比较慢LEFT [OUTER] JOIN,但在我看来,它们的强度可读性稍高。

POPMUISE

子查询是解决形式问题的逻辑上正确的方法,“从A获取事实,以B中的事实为条件”。在这种情况下,在子查询中粘贴B比进行连接更合乎逻辑。从实际意义上说,它也更安全,因为你不必因为多次匹配B而从A中获取重复的事实时要谨慎。然而,实际上,答案通常归结为性能。一些优化器在给出连接和子查询时会吮吸柠檬,而另一些优化者则以另一种方式吮吸柠檬,这是特定于优化器,特定于DBMS的版本和查询特定的。从历史上看,显式连接通常会获胜,因此连接的既定智慧更好,但优化器一直在变得越来越好,所以我更喜欢先以逻辑连贯的方式编写查询,然后在性能限制要求时进行重组。

缥缈止盈

在大多数情况下,JOINs比子查询更快,并且子查询的速度非常快。在JOINSDB中,RDBMS可以创建一个更适合您的查询的执行计划,并且可以预测应该加载哪些数据以进行处理并节省时间,这与子查询不同,后者将运行所有查询并加载所有数据以进行处理。子查询的好处是它们比JOINs 更具可读性:这就是大多数新SQL用户更喜欢它们的原因; 这是简单的方法; 但是在性能方面,JOINS在大多数情况下都更好,即使它们也不难读。

慕婉清6462132

使用EXPLAIN查看数据库如何对数据执行查询。在这个答案中有一个巨大的“取决于”......当PostgreSQL认为一个子查询比另一个更快时,它可以将子查询重写为连接或子查询的连接。这一切都取决于数据,索引,相关性,数据量,查询等。
打开App,查看更多内容
随时随地看视频慕课网APP