【问题标题】:Does it matter which field is used to perform a JOIN on for performance? [closed]使用哪个字段来执行 JOIN 以提高性能是否重要? [关闭]
【发布时间】:2020-06-17 22:30:11
【问题描述】:

我的 join 语句中字段的顺序是否重要?这会提高性能吗?

例如,

Select * 
from TABLEA
left join TABLEB on TABLEA.NUM_0 = TABLEB.NUM_0

对比

Select * 
from TABLEA
left join TABLEB on TABLEB.NUM_0 = TABLEA.NUM_0

on 字段的顺序真的很重要吗?对于连接的多个和语句,同样的问题也可以。

谢谢。

【问题讨论】:

  • 清除后,这将是一个常见问题解答。请在考虑发布之前阅读您的教科书和/或手册和谷歌任何错误消息或您的问题/问题/目标的许多清晰、简洁和精确的措辞,有和没有您的特定字符串/名称和站点:stackoverflow.com 和标签;阅读许多答案。如果您发布问题,请使用一个短语作为标题。反映你的研究。请参阅How to Ask 和投票箭头鼠标悬停文本。
  • 我正在使用 SQL Server 并解决了我的问题。 GMB 能够在他回答的后半部分回答这个问题。谢谢。
  • 这表明没有关于查询的含义或性能的研究。是否存在结果差异,除了查询含义的重写之外,答案是什么?你不需要我们。询问您的期望未达到的地方以及原因,或者您在演示文稿中试图自己回答这个问题的地方以及原因。此外,您的描述仍然不清楚,尽管您的示例显示出某种重新排序的感觉。函数顺序、逻辑运算符 & JOIN 操作数 & 的 JOIN 都是常见问题。性能的基础也是如此。 PS请通过编辑而不是cmets进行澄清。 PS 每个帖子问 1 个问题。
  • 请参阅How do comment @replies work? 以学习使用@x 通知一位非唯一非发布者评论者 x 重新发表评论。

标签: sql join select


【解决方案1】:

关于这两个连接条件:

on TABLEA.NUM_0 = TABLEB.NUM
on TABLEB.NUM_0 = TABLEA.NUM

条件不同(您在两个表中使用不同的列),因此查询不同,并可能产生不同的结果。

现在,如果你的意思是:

on TABLEA.NUM_0 = TABLEB.NUM
on TABLEB.NUM   = TABLEA.NUM_0

这里的条件是等价的。反转操作数对数据库有影响吗?不。在算术中,相等是 commutative 操作 - 对于数据库也是如此。查询规划器理解这一点,并将这两个表达式视为完全相同的事物。

【讨论】:

    【解决方案2】:

    假设您的意思是两个 ON 子句相同,那么不,没关系。 SQL 实际上被“编译”成一个执行计划,这些类型的差异并不重要。

    【讨论】:

    • 没有where子句?
    • 抱歉,ON 子句。同样的想法。一旦编译到执行计划中,顺序就无关紧要了。
    • 答案已更新。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2010-09-06
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 2012-08-13
    相关资源
    最近更新 更多