gpt4 book ai didi

performance - 为什么 IsNull 比合并(相同查询)慢两倍?

转载 作者:行者123 更新时间:2023-12-04 03:19:05 24 4
gpt4 key购买 nike

我们在 SQL Server 2008 (SP1) - 10.0.2531.0 (X64) - Win2008 SP2 (X64) 上遇到了一个奇怪的情况。

这是一个沉重的查询:

select t1.id, t2.id 
from t1, t2
where
t1.id = t2.ext_id
and isnull(t1.vchCol1, 'Null') = isnull(t2.vchCol1, 'Null')
and isnull(t1.vchCol2, 'Null') = isnull(t2.vchCol2, 'Null')
.... and about 10 more comparisons with Isnull

UPD :比较的所有列(ID 除外)都是 varchar (~30...200)
T1 是约 1.3 亿行,T2 是约 30 万行。

这些查询在相当大的开发服务器上运行 ~5 小时 - 这很慢,但我们能做什么?

虽然我们调查了可能的优化方法 - 我们发现,改变 "isnull" “合并”在上面的查询中提供了双倍的性能增益 - 现在查询运行于 ~2 小时

UPD : 当我们删除所有 ISNULL仅检查和使用 t1.vchCol1 = t2.vchCol1查询在 后结束40 分钟 .

问题是:这是已知的行为,我们应该 避免 到处使用 IsNull ?

最佳答案

我想知道通过明确地拆分案例您是否会看到改进:

...
AND ((t1.vchCol1 = t2.vchCol1) OR (t1.vchCol1 IS NULL AND t2.vchCol1 IS NULL))
AND ((t1.vchCol2 = t2.vchCol2) OR (t1.vchCol2 IS NULL AND t2.vchCol2 IS NULL))
...

关于performance - 为什么 IsNull 比合并(相同查询)慢两倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152574/

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