【问题标题】:Does the sequence in which we use join in a query effects its execution time?我们在查询中使用连接的顺序会影响它的执行时间吗?
【发布时间】:2010-02-16 18:28:40
【问题描述】:

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

【问题讨论】:

    标签: sql sql-server sql-server-2005 sql-execution-plan


    【解决方案1】:

    不,它没有。

    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) 的相同计划和添加的不同计划。

    但是,只有在您完全确定自己知道自己在做什么时,才应该使用此提示。

    【讨论】:

    • 永远不要使用提示,除非系统正在慢慢死去。你怎么知道下一个版本的 SQL Server 不会以不同的方式工作,这会导致你的提示减慢速度?
    【解决方案2】:

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

    【讨论】:

    • 连接序列的影响在使用更多连接和更多连接的复杂查询中可见。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      对于外连接,表的顺序会改变查询的含义,并且很可能会改变执行计划。

      【讨论】:

        猜你喜欢
        • 2021-03-09
        • 2019-09-14
        • 2011-11-14
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-25
        相关资源
        最近更新 更多