【问题标题】:Maximize joins in from clause and minimize joins in the where clause : true?最大化 from 子句中的连接并最小化 where 子句中的连接:true?
【发布时间】:2014-04-25 16:46:51
【问题描述】:

这是一道考试题,有知识的人可以给出答案和解释吗?

【问题讨论】:

  • 不完全。只应在from 子句中进行连接,而不要在where 子句中进行隐式连接(相关子查询除外)。
  • 通过 where 子句中的隐式连接,我猜像 select <columns> from tabA , tabB where tabA.col1 = tabB.col1 这样的意思是不是?
  • 是的。一个简单的规则是:不要在from 子句中使用逗号。
  • 谢谢 :) 你能提供一些链接让我了解更多吗?
  • 值得注意的是,SQL 中的性能始终是特定于实现的。

标签: sql performance join syntax


【解决方案1】:

大多数 RDBMS 产品都对这两个查询进行了相同的优化。

在 Peter Gulutzan 和 Trudy Pelzer 的 SQL Performance Tuning 中,作者测试了六到八个品牌的 RDBMS,发现两种不同风格的连接之间没有显着的性能差异。因此,为了性能,没有一种语法优于另一种语法。

FROM 子句中使用JOIN 语法的原因是:

  • 允许 SQL-89(逗号样式)连接语法中不可能的连接类型,例如外连接、自然连接、USING() 子句等。

  • 符合标准 SQL-92 语法。多年来,所有品牌的 RDBMS 都支持这种语法,甚至包括 Oracle 和 Microsoft/Sybase,它们在过去都曾发明过自己专有的外连接语法。

  • 清理您的代码,让您一目了然地了解您正在使用哪种联接类型(内部、外部),以及哪些术语是联接条件,哪些术语是行限制条件。

使用逗号样式语法而不是JOIN 语法的原因是:

  • 没有,除非你键盘上的“J”键坏了。 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多