首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左连接的最优连接顺序(连接)

左连接的最优连接顺序(连接)
EN

Stack Overflow用户
提问于 2010-06-12 02:30:24
回答 3查看 1.9K关注 0票数 3

我有3个表Table1 (有1020690条记录),Table2(有289425条记录),表3(有83692条记录).I有类似这样的内容

代码语言:javascript
复制
SELECT * FROM Table1 T1 /* OK fine select * is bad when not all columns are needed, this is just an example*/
LEFT JOIN Table2 T2 ON T1.id=T2.id
LEFT JOIN Table3 T3 ON T1.id=T3.id

和类似这样的查询

代码语言:javascript
复制
SELECT * FROM Table1 T1
LEFT JOIN Table3 T3 ON T1.id=T3.id
LEFT JOIN Table2 T2 ON T1.id=T2.id

查询计划告诉我,它对两个连接都使用了2个合并连接。对于第一个查询,首先是与T1和T2合并,然后是与T3合并。对于第二个查询,首先是与T1和T3合并,然后是与T2合并。

这两个查询花费的时间大致相同(约40秒)或者有时Query1会多花几秒钟的时间。

所以我的问题是,联接顺序重要吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-12 02:35:40

像这样的简单查询的连接顺序不应该很重要。如果有办法重新排序连接以提高性能,那就是查询优化器的工作。

从理论上讲,您不必担心这一点--这就是SQL的意义所在。试图超越查询优化器通常不会得到更好的结果。特别是在MS SQL Server中,它有一个非常好的查询优化器。

我不希望这个查询花费40秒。您可能没有定义正确的索引。您应该使用诸如SQL Server ProfilerSQL Server Database Engine Tuning Advisor之类的工具来查看它是否可以推荐任何新的索引。

票数 3
EN

Stack Overflow用户

发布于 2010-06-12 02:42:21

查询优化器将使用在表上收集的约束、索引和统计信息的组合来构建执行计划。在大多数情况下,这样做效果很好。然而,我确实偶尔会遇到执行计划选择不当的情况。通常,调整查询可以有效地迫使优化器选择更好的计划。不过,我不能提供这样做的一般规则。当所有其他方法都失败时,您可以求助于FORCE ORDER query hint

是的,联接顺序可能会对查询的执行时间产生重大影响。其思想是,通过首先连接产生最小结果的表,将导致更快地计算下一个连接。编辑:需要注意的是,在FORCE ORDER的缩写和所有其他条件相同的情况下,您在查询中指定的顺序可能与优化器构建执行计划的方式无关。

票数 2
EN

Stack Overflow用户

发布于 2010-06-12 02:36:06

通常,SQL Server足够聪明,能够挑选出最佳的联接方式,而且它不仅会使用您在查询中编写的顺序。也就是说,如果所有的内部连接都是先进行的,然后是左连接,我发现理解一个复杂的查询会更容易。

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

https://stackoverflow.com/questions/3025288

复制
相关文章

相似问题

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