【问题标题】:Regarding JOIN logic performance improvement关于JOIN逻辑性能提升
【发布时间】:2019-12-17 08:01:42
【问题描述】:

我的查询与涉及多个表或其他数据库对象的 JOIN 逻辑有关。

查询 1: 如果有一段代码包含涉及多个表的连接逻辑,我们应该在 ON 子句中首先比较哪些列? 就像,我们应该考虑主键列,然后是外键列,然后是其他必需的列 例如:

c.dept_ID = d.dept_ID
AND d.product_ID = e.product_ID
AND ----
----

这些比较的顺序对于查询性能真的很重要吗?

查询 2: 假设表别名 c 有 100 个部门或表别名 d 有 10 个部门,比较顺序在这里重要吗?喜欢,

c.dept_ID = d.dept_ID or
d.dept_ID = c.dept_ID

查询 3: 如果我们同时包含多个表的视图,应该最后还是首先比较相关的列?

【问题讨论】:

  • 在相关字段之间拥有索引或引用链接将对性能产生更大的影响。如果您确实有性能问题,请使用慢速请求分析来查看哪些查询是您的问题。
  • 您能否详细说明“慢速请求分析”或提供任何可以帮助我的网络链接或示例场景。实际上,我正处于学习阶段,并且有很多与此相关的疑问。
  • 这个答案是旧的,但基础仍然是正确的。请花一些精力自己研究问题。 stackoverflow.com/questions/257906/…
  • 感谢 Dragonthoughts。将通过您共享的链接。
  • @Dragonthoughts 或其他人:你能在第二个和第三个查询上帮助我吗?

标签: sql-server performance join


【解决方案1】:

这可能取决于此描述中不为人知的许多事情。比如索引/统计、表设计、数据等。用不同的方式写条件,比较查询优化器产生的查询盘,找出

【讨论】:

  • 感谢 Cedersved 的回复。是的。我知道在 JOIN 逻辑中应用条件时需要考虑很多事情。但是,遵循主键列之类的规则是否很好,应该首先考虑应用索引的列。
  • 任何人,谁会在我的查询 2 上帮助我
  • 任何愿意为我提供帮助的人来完成我的查询 3
  • SQL-Server 的版本也有很大的不同,因为企业版有更多的报告和一般优化,包括更大的缓存。
【解决方案2】:

在大多数情况下,加入条件的顺序无关紧要。

重要的是哪个连接将过滤多少数据? 连接是否过滤只需要数据或更多数据。

查询 2:没关系。

查询 3:问题无效。这取决于示例。

【讨论】:

    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多