gpt4 book ai didi

sql-server - ANSI JOIN 与非 ANSI JOIN 查询的性能是否会有所不同?

转载 作者:行者123 更新时间:2023-11-29 23:36:39 27 4
gpt4 key购买 nike

我的业务逻辑包含在大约 7000 行 T-SQL 存储过程中,其中大多数都具有下一个 JOIN 语法:

SELECT A.A, B.B, C.C
FROM aaa AS A, bbb AS B, ccc AS C
WHERE
A.B = B.ID
AND B.C = C.ID
AND C.ID = @param

如果我用以下查询替换此类查询,我会获得性能增长吗:

SELECT A.A, B.B, C.C
FROM aaa AS A
JOIN bbb AS B
ON A.B = B.ID
JOIN ccc AS C
ON B.C = C.ID
AND C.ID = @param

或者它们是相同的?

最佳答案

这两个查询是相同的,只是第二个查询是 ANSI-92 SQL 语法,第一个查询是较旧的 SQL 语法,未包含 join 子句。尽管您可能想检查一下,但它们应该生成完全相同的内部查询计划。

出于多种原因,您应该使用 ANSI-92 语法

  • 使用 JOIN 子句分隔关系逻辑来自过滤逻辑(WHERE),因此更清晰、更容易理解。
  • 这与此特定查询无关,但在某些情况下,旧的外连接语法(使用 + )不明确,因此查询结果依赖于实现 - 或者根本无法解析查询。 ANSI-92 不会出现这些情况
  • 这是一个很好的做法,因为现在大多数开发人员和 dba 将使用 ANSI-92,您应该遵循该标准。当然,所有现代查询工具都会生成 ANSI-92。
  • 正如 @gbn 所指出的,它确实能够避免意外的交叉连接。

我自己有一段时间抵制 ANSI-92,因为旧语法在概念上有一点优势,因为它更容易将 SQL 想象为所有使用的表的大规模笛卡尔连接,然后进行过滤操作 - 一种心理技术,对于掌握 SQL 查询正在执行的操作很有用。然而,几年前我决定我需要与时俱进,经过相对较短的调整期后,我现在非常喜欢它 - 主要是因为上面给出的第一个原因。唯一应该偏离 ANSI-92 语法(或者更确切地说不使用该选项)的地方是自然连接,这隐含着危险。

关于sql-server - ANSI JOIN 与非 ANSI JOIN 查询的性能是否会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26343386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com