【问题标题】:SQL Join query with filter condition : performance带有过滤条件的 SQL 连接查询:性能
【发布时间】:2015-02-24 08:05:24
【问题描述】:

我想加入几个表,但从“A”表中过滤出特定类型。以下两个查询中哪个查询更好(有更好的方法吗?)还是查询优化器没有区别原因?

当'WHERE'子句中给出过滤条件时:

SELECT .. FROM A a JOIN B b ON a.id=b.id JOIN C c on a.id = c.id...<other joins>...WHERE a.col='SOME_VAL';

过滤条件在'ON'内给出:

SELECT .. FROM A a JOIN B b ON a.id=b.id AND a.col='SOME_VAL' JOIN C c on a.id = c.id...<other joins>

【问题讨论】:

    标签: sql oracle11g


    【解决方案1】:

    使用 INNER JOIN 不会产生性能差异,您可以使用 EXPLAIN 检查(两种形式的查询应该产生相同的计划)。

    使用 WHERE 子句的好处通常是可读性。与多行布局结合使用时。 (我强烈建议不要将所有 SQL 都保留为一条长线。)

    SELECT
      stuff
    FROM 
      foo
    INNER JOIN
      bar
        ON  (join predicates here)
    WHERE
      (static filters here)
    

    它变得更容易阅读(和维护)的原因是连接谓词现在明确地描述了表之间的关系。查询在没有 WHERE 子句的情况下仍能正常运行,但返回更大的集合。

    【讨论】:

      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2012-03-14
      • 2018-03-08
      • 2020-03-25
      相关资源
      最近更新 更多