Sql 我们在查询中使用join的顺序会影响其执行时间吗?

Sql 我们在查询中使用join的顺序会影响其执行时间吗?,sql,sql-server,sql-server-2005,sql-execution-plan,Sql,Sql Server,Sql Server 2005,Sql Execution Plan,我们在查询中使用join的顺序会影响其执行时间吗?是的。它的效果可以在查询执行计划中看到。参考和。 另一个链接是不,它没有 SQL Server的优化器选择最好的方式(在它看来),而不管连接顺序如何 SQL Server支持一个特殊提示,FORCE ORDER,该提示使表按其列出的顺序引入联接 这些查询: SELECT * FROM t_a JOIN t_b ON a = b OPTION (FORCE ORDER) 及 将生成省略了选项(强制订单)的相同计划,以及添加

我们在查询中使用join的顺序会影响其执行时间吗?

是的。它的效果可以在查询执行计划中看到。参考和。 另一个链接是

不,它没有

SQL Server
的优化器选择最好的方式(在它看来),而不管连接顺序如何

SQL Server
支持一个特殊提示,
FORCE ORDER
,该提示使表按其列出的顺序引入联接

这些查询:

SELECT  *
FROM    t_a
JOIN    t_b
ON      a = b
OPTION (FORCE ORDER)

将生成省略了
选项(强制订单)
的相同计划,以及添加了该选项的不同计划


但是,只有当你绝对确定你在做什么时,你才应该使用这个提示。

< P>优化器通常会比较所有的连接顺序,并尝试选择最佳顺序,而不管你写的查询顺序如何,但是在一些复杂的查询中,有太多的选项要考虑,注意,可能的联接顺序的数量增加到联接表数量的阶乘。在这种情况下,优化器将不考虑所有选项,但一定会考虑在查询中写入连接的顺序,因此可能会影响执行计划和执行时间。表的顺序会改变查询的含义,并且很可能会改变执行计划。

在使用越来越多的联接的复杂查询中,联接顺序的影响是可见的。除非系统绝对会慢慢消亡,否则不要使用提示。您如何知道SQL Server的下一个版本不会以不同的方式工作,这会导致您的提示减慢速度?
SELECT  *
FROM    t_b
JOIN    t_a
ON      a = b
OPTION (FORCE ORDER)