delete from tb_cdwaac where convert(datetime, convert(varchar, CheckTime, 101)) in ('2009-6-1','2009-6-2','2009-6-3','2009-6-4','2009-6-5','2009-6-6','2009-6-7','2009-6-8','2009-6-9','2009-6-10','2009-6-11','2009-6-12','2009-6-13','2009-6-14','2009-6-15','2009-6-16','2009-6-17','2009-6-18','2009-6-19','2009-6-20','2009-6-21','2009-6-22','2009-6-23','2009-6-24','2009-6-25','2009-6-26','2009-6-27','2009-6-28','2009-6-29','2009-6-30')in条件中的时间是不确定的。但是就是上一条,一次就删除3000行左右,有时候一瞬间就执行完了,有时候要好长时间,甚至超过一分钟,请高手指点。是否需要优化sqlserver服务器,才怎么进行。谢谢。

解决方案 »

  1.   

    delete from tb_cdwaac where convert(varchar(7), CheckTime, 120) ='2009-06' 
      

  2.   

     这没法优化,要么把后面的时间放到#t 里试试:
    delete from tb_cdwaac where convert(datetime, convert(varchar, CheckTime, 101)) in 
    (select 时间 from #t)
      

  3.   

    delete from tb_cdwaac where convert(varchar(6),CheckTime,112)='200906'
      

  4.   

    --1 把IN 裡面的日期 放到臨時表中
    --2 tb_cdwaac 增加計算列 AS convert(varchar, CheckTime, 101)並建立索引
    --3 刪除根據條件與臨時表join
      

  5.   

    [code=SQL]delete from tb_cdwaac 
    where CheckTime between '2009-6-1' and '2009-6-30 23:59:59'