gpt4 book ai didi

sql - 重写 WHERE NOT IN 子句的最佳方法?

转载 作者:行者123 更新时间:2023-12-01 13:07:25 26 4
gpt4 key购买 nike

我有一个类似下面的查询:

Select ser.key
From dbo.Enrlmt ser
Where ser.wd >= @FromDate AND ser.wd <= @ThrouDate AND
ser.EnrlmtStatCode = '4321' AND
ser.StuExitCatgCode in ('1','2','3','4','5','6','7') AND
ser.Key not in (select Key
from Enrlmt ser2
where ser2.StartDate <= @AsOfDate
AND ser2.StartDate > ser.wd
AND ser2.EnrlmtStatCode = '4321')

由于“NOT IN”子句,这非常慢。我尝试使用左外连接重写它,使其看起来像:

   Select ser.key
From dbo.Enrlmt ser
LEFT JOIN dbo.Enrlmt ser2 ON ser.key = ser2.key
AND ser2.StartDate <= @AsOfDate
AND ser2.StartDate > ser.wd
AND ser2.EnrlmtStatCode = '4321'
Where ser2.key is null
AND ser.wd >= @FromDate
AND ser.wd <= @ThrouDate
AND ser.EnrlmtStatCode = '4321'
AND ser.StuExitCatgCode in ('1','2','3','4','5','6','7')

哪个更快,但结果不匹配。我在重写时做错了什么吗?有更好的方法吗?

最佳答案

也许这是一个拼写错误,但在第一个查询中,您正在比较 StuKey 列,而在第二个查询中,您正在加入 Key

在性能方面,我希望这 2 个查询产生非常相似(如果不相同)的执行计划。您应该查看两者的计划。

此外,请确保在运行之间清除数据缓存,因为它们实际上可能执行相同的操作,但由于数据缓存,第二次似乎更快。

关于sql - 重写 WHERE NOT IN 子句的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008442/

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