首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >联接顺序和SQL中的哪个位置会影响性能吗?

问联接顺序和SQL中的哪个位置会影响性能吗?
EN

Stack Overflow用户
提问于 2020-04-14 06:54:55
回答 2查看 187关注 0票数 1

在SQL中,连接顺序对查询性能有多大影响?

( a)选择…从JOIN ( SELECT…)来自B,其中条件 ) ON…

( b)选择…从JOIN ( SELECT…)来自B ) ON…,其中条件

我内心的感觉告诉我,选项a)应该更有表现力:如果我们先做一个联接,然后运行where,那么它的性能似乎要比在一个表上首先运行where和从resutls上运行一个联接要少得多。但我不确定,因为这取决于SQL库本身的内部优化。

如果知道MySQL和PostgreSQL的行为是否相同,以及是否依赖于group by或order by等其他装饰师,那将是很好的选择。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-14 11:46:22

Postgres有一个智能优化器,因此在大多数情况下,这两个版本应该有类似的执行计划(稍后我会再讲)。

MySQL倾向于实现子查询。虽然在最近的版本中,这种情况有所改善,但我仍然建议避免使用。实例化子查询会阻止索引的使用,并会对性能产生重大影响。

注意:如果子查询很复杂,那么最好将其作为子查询的一部分进行过滤。例如,如果它是一个聚合,那么在聚合之前进行过滤通常会带来更好的性能。也就是说,Postgres在将条件推入子查询方面是很聪明的。因此,如果外部过滤位于聚合中使用的键上,Postgres就足够聪明地将条件推入子查询中。

票数 1
EN

Stack Overflow用户

发布于 2020-04-14 06:58:31

在所有其他因素相同的情况下,我希望A版本比B版本表现得更好,就像您似乎也期望的那样。造成这种情况的主要原因是A版本允许数据库使用子查询中的WHERE子句抛出行。然后,联接只需要包含一个较小的中间表。两者性能的确切差异将取决于底层数据和实际查询。请注意,甚至有可能这两个查询都可以在幕后优化到相同或非常相似的执行计划。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61202184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档