gpt4 book ai didi

sql - 使用相同的WHERE子句,SQL Server DELETE和SELECT的行为不同

转载 作者:行者123 更新时间:2023-12-04 11:36:44 25 4
gpt4 key购买 nike

我有一个表,该表由每日计划的作业填充,该表删除了最近7天的数据,然后使用来自另一个源(大型机)的最近7天的数据重新填充。

最近,用户报告了许多重复事件,这些重复事件可以追溯到2011年10月开始。。。。

我注意到每个作业运行的删除都有奇怪的行为:

DELETE FROM fm104d 
WHERE location = '18'
AND (CONVERT(datetime,CASE WHEN ISDATE(pull_date)=0 THEN '19000101'
ELSE pull_date END)) > DATEADD(day, -7, getdate())


上面的返回“(受影响的0行)”。

当我用SELECT *替换DELETE后运行上面的命令时,我得到32,000多行。

为什么SELECT和DELETE的行为会有所不同?

更新

这是实际的执行计划:

http://pastie.org/2869202

最佳答案

你不会相信的。实际上,我没有,因为这几乎没有逻辑意义,但是最后,有效的解决方案是添加索引。

这归功于我本地的DBA“是否考虑过添加索引?我只是做过测试,并确定它足够有效”。

这是添加的索引:

CREATE  INDEX ixDBO_fir104d__SOURCE_LOCATION__Include
ON [dbo].[fir104d] ([SOURCE_LOCATION])
INCLUDE ([Transaction_Date],[PULL_DATE])
GO


我让工作按计划运行,当然,一切都照原样进行了。

我的猜测是,在解释计划中有某些内容表明它没有使用索引/错误的索引,但是我的开发人员头脑并不太了解该级别的细节。

感谢大家付出的时间和精力。

更新

从另一位开发人员那里收到消息,该表中的数据另外损坏到需要“花费数小时的DBA来解决”的程度,并且开发人员还必须执行一些其他数据修复(read:data文件重新加载)。

归根结底,考虑到预定作业的运行方式,添加索引可能是一件好事,显然,故事还有更多!

关于sql - 使用相同的WHERE子句,SQL Server DELETE和SELECT的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128775/

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