gpt4 book ai didi

sql - 为什么 'HASH JOIN' 或 'LOOP JOIN' 改进了这个存储过程?

转载 作者:行者123 更新时间:2023-12-03 15:47:37 26 4
gpt4 key购买 nike

我有一个基本查询,只需从 LEFT JOIN 更改一个连接即可从 6 秒变为 1 秒。至 LEFT HASH JOIN或“左循环加入”。谁能解释为什么这会导致性能如此大的提高,以及为什么 SQL 的优化器不能自己解决这个问题?

SQL 大致如下所示:

SELECT
a.[ID]
FROM
[TableA] a
LEFT HASH JOIN
[TableB] b
ON b.[ID] = a.[TableB_ID]
JOIN
[TableC] c
ON c.[ID] = a.[TableC_ID]
WHERE
a.[SomeDate] IS NULL AND
a.[SomeStatus] IN ('X', 'Y', 'Z') AND
c.[SomethingElse] = 'ABC'

表 A 和 B 在所有 ID 字段上都有数百万条记录和索引。使用 SQL Server 2005。

编辑:一位同事建议使用 LEFT LOOP JOIN,它似乎使它变得更快...... SQL 不是我的强项之一,所以我试图了解这些“提示”是如何提供帮助的。

最佳答案

HASH JOIN当大百分比的行对结果集有贡献时很有用。

在你的情况下,建立一个 HASH TABLE在任一 AB扫描另一个表比执行 NESTED LOOPS 更便宜上指数B.ID或者合并优化器在提示之前使用的排序结果集。
SQL Server的优化器没有看到:可能是因为您没有收集统计​​信息,可能是因为您的数据分布有偏差。

更新:

既然你提到了 LOOP JOIN提高了速度,可能是这样JOIN优化器错误地选择了顺序。

关于sql - 为什么 'HASH JOIN' 或 'LOOP JOIN' 改进了这个存储过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1395582/

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