【发布时间】:2010-02-16 18:28:40
【问题描述】:
我们在查询中使用 join 的顺序会影响它的执行时间吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-execution-plan
我们在查询中使用 join 的顺序会影响它的执行时间吗?
【问题讨论】:
标签: sql sql-server sql-server-2005 sql-execution-plan
不,它没有。
SQL Server 的优化器会选择最好的(在它看来)方法,而不管加入顺序如何。
SQL Server 支持一个特殊提示 FORCE ORDER,它使表按照它们列出的顺序在连接中引导。
这些查询:
SELECT *
FROM t_a
JOIN t_b
ON a = b
OPTION (FORCE ORDER)
和
SELECT *
FROM t_b
JOIN t_a
ON a = b
OPTION (FORCE ORDER)
将生成省略OPTION (FORCE ORDER) 的相同计划和添加的不同计划。
但是,只有在您完全确定自己知道自己在做什么时,才应该使用此提示。
【讨论】:
优化器通常会比较所有连接顺序并尝试选择最佳顺序,而不管您编写查询的顺序如何,但是在一些复杂的查询中需要考虑的选项太多了,请注意可能的连接顺序数量增加到加入的表数的阶乘。在这种情况下,优化器不会考虑所有选项,但肯定会考虑您在查询中编写连接的顺序,因此可能会影响执行计划和执行时间。
【讨论】:
对于外连接,表的顺序会改变查询的含义,并且很可能会改变执行计划。
【讨论】: