一个删除语句23:30开始执行,内容是删除最近7天数据  WHERE Date> CAST(GETDATE()-7 AS DATE) 大概执行1小时,第二天凌晨00:30结束
由于中间横跨了个00:00,删除数据上会不会出现前30分钟删除的是第一天的日期往前推7天的数据
后30分钟删除的是第二天的日期往前推7天的数据

解决方案 »

  1.   

    没有找到显式的文档说明,推测是只计算一次 GETDATE() 的。
    不过合理的逻辑应该是从 24:00 前推 7 天吧,而不是从开始执行的时间前推。又:删除的性能不应该这么差,建议在 Date 字段上建索引。
    又:这是什么需求,删除最近7天难道还有7天以前的数据?不是全表删除吗?
      

  2.   

    建议你换一种写法,一般都是弄个变量,例如下面的declare @date date
    set @date = getdate()WHERE Date between dateadd(d,-7,@date) and @date
      

  3.   

    不会的,你执行getdate() 时,会把这值取出来,就跟常量一样。你可以做一个这样的实验,找一张大表 100W+ ,目的是为了执行一个语句超过 5 秒或 10 秒的。select * ,getdate() from t 看看,是不是一样的,   
      

  4.   


    1.已经在Date上创建单独的索引
    2.因为最近7天内的数据有均有可能发生变化,所以删除最近7天,重新导入上头丢过来的最新7天数据
    3.数据库有5000W+数据,所以删除效率一直我头疼的地方
      

  5.   

    不如把最新7天的数据单独开一个表。
    先将7天前的插入历史表,
    再用 TRUNCATE TABLE 全删除,
    最后导入。
      

  6.   

    不会出现你担心的情况的,你在执行这个语句的时候,获取的getedate()日期已经确定,不是说你执行到0点的时候重新获取的
      

  7.   

    获取的getedate()日期是执行的时间,不会随着你执行而改变