【问题标题】:which runs first:joins or where clause首先运行:joins 或 where 子句
【发布时间】:2012-12-21 23:32:56
【问题描述】:

我有一个查询,我正在使用 13 LEFT OUTER JOINS。最左边的表有大量数据,因此执行查询并返回结果需要很长时间。 但是当我使用 where 子句过滤结果时,它花费的时间非常少。 现在我对哪个先执行感到困惑:产生结果的连接,然后 where 子句从中过滤或首先过滤结果,然后将结果连接起来。

【问题讨论】:

  • 请记住,无论 SQL Server 的查询优化器选择如何调整您的步骤,您能做的最好的事情就是正确维护和索引您的数据,以便服务器可以更轻松地完成其工作。
  • 维护良好 STATISTICS 也有帮助。
  • 如果你得到你想要的信息,别忘了点赞并将其标记为已接受

标签: sql sql-server-2008


【解决方案1】:

一般来说,任何DBMS(比如SQL)都会做自己的查询优化,使用它认为最快的算法。所以它正在过滤,然后加入。

【讨论】:

    【解决方案2】:

    Copied from my previous answer

    create table A(id int);
    create table B(id int);
    
    INSERT INTO A VALUES(1);
    INSERT INTO A VALUES(2);
    INSERT INTO A VALUES(3);
    
    INSERT INTO B VALUES(1);
    INSERT INTO B VALUES(2);
    INSERT INTO B VALUES(3);
    
    SELECT * FROM A;
    SELECT * FROM B;
    
    id
    -----------
    1
    2
    3
    
    id
    -----------
    1
    2
    3
    

    过滤 JOIN 以防止在 JOIN 过程中添加行。

    select a.*,b.*
    from   A a left join B b 
    on     a.id =b.id and a.id=2;
    
    id          id
    ----------- -----------
    1           NULL
    2           2
    3           NULL
    

    WHERE 将在 JOIN 发生后过滤。

    select a.*,b.* 
    from   A a left join B b 
    on     a.id =b.id 
    where  a.id=2;
    
    id          id
    ----------- -----------
    2           2
    

    【讨论】:

      【解决方案3】:

      阅读:which one runs first in query execution WHERE CLAUSE orJOIN CLAUSE ?

      我正在发 Pinal Dave 的帖子,我发现了这个,它可能也有助于你理解

      SQL SERVER – Interesting Observation of ON Clause on LEFT JOIN – How ON Clause affects Resultset in LEFT JOIN

      了解 ON 子句它在 JOIN 之前应用,这就是为什么它检索 Table2 的所有结果,其中 Flag = 1 但它不影响 Table1,因此它检索 table1 的所有行。应用 WHERE 子句时,它适用于完整结果,因此它会删除 Table1 和 Table2 中 Flag 不等于 1 的所有行,基本上保留 Table1 和 Table2 中的 flag = 1 行。

      【讨论】:

        猜你喜欢
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-13
        • 2018-01-02
        相关资源
        最近更新 更多