【问题标题】:SQL - proper join VS a = b in where clauseSQL - 在 where 子句中正确连接 VS a = b
【发布时间】:2015-09-16 11:33:19
【问题描述】:

我只是希望有人能告诉我以下 2 个查询之间的效率是否存在差异。


查询 1

SELECT A.CUSTOMER, B.INVOICE FROM CUS A

JOIN INV B ON
A.CUS_ID = B.CUS_ID

WHERE
B.INV_DATE > '2015-09-06'

查询 2

SELECT A.CUSTOMER, B.INVOICE FROM CUS A, INV B

WHERE A.CUS_ID = B.CUS_ID AND

B.INV_DATE > '2015-09-06'

我很确定查询 1 会更有效,但我希望有人可以确认。

【问题讨论】:

  • 只考虑使用第一个版本,它是符合 ANSI 的显式 JOIN 语法。甚至没有理由考虑查询的第二个版本。两者应该有相同的执行计划。
  • @GordonLinoff 问题是查询 2 已经存在于我正在维护的遗留代码中,我希望将其更新为查询 1。问题是,我们通常需要证明“修复”已经作品。如果更改提高了性能,那将是不费吹灰之力。

标签: sql performance join where-clause


【解决方案1】:

SELECT * FROM table1, table2, ... 语法对于几个表来说是可以的,但随着表数量的增加,它变得越来越难以阅读(不一定是数学上准确的语句)。

JOIN 语法(在开始时)更难编写,但它明确了哪些条件会影响哪些表。这使得犯错变得更加困难。

此外,如果所有联接都是 INNER,则两个版本是等效的。然而,当你在语句中的任何地方有一个 OUTER join 的那一刻,事情变得更加复杂,它几乎可以保证你写的不会是 查询你认为你写的东西。

您的性能问题已得到解答:没有区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多