实现的功能是定期删除老数据,以保证数据库内的数据不超过用户定义的最大数量,删除的SQL语句如下:DELETE FROM my_table 
WHERE time <= (SELECT MAX(timeSet.time) FROM 
(SELECT TOP %d time FROM my_table WITH (NOLOCK) ORDER BY time) 
AS timeSet)其中%d将被删除的实际记录数量代替,time字段是记录的创建时间,my_table是数据库表。当记录总数为45万条,需要删除18万条记录时,删除耗时12分钟,时间长,而且在删除时存储数据失败。请教,是否能够通过改进SQL语句使删除时间缩短?如何解决在删除时存储数据失败的问题?数据库用的是SQL Server 2000。

解决方案 »

  1.   

    同问~~~
    大量的数十万的数据.
    我只是删除一个表中的所有数据就用很长时间.形如 delete from abc 的命令,在企业管理器中使用,有时甚至会失败.反复几次有时候就自己好了.我应该如何设置我的数据库?
      

  2.   

    delete from abc
    这样的语句还怎么优化啊!?
    是不是SQL2k需要修改一些配置?
      

  3.   

    在SqlServer里面做个Task在每天晚上的12点执行就行啊,
    哪怕执行一个小时也不用管他,反正那时候大家都在睡觉,也没多少用户.
    就象存储过程一样.只是它会自动定期执行.
      

  4.   

    lzzqqq(Jonersen),你的意思是,我的删除语句已经没有可以改进的地方,执行时间本来就需要那么长,只能通过在夜间执行来避免记录存储失败吗?
      

  5.   

    建议你去SQL版问问邹建大侠!
      

  6.   

    可以考虑把delete放在
    EXECUTE sp_dboption 'database','select into/bulkcopy','true'
    DELETE *** where ***
    EXECUTE sp_dboption 'datebase','select into/bulkcopy','false'删除大量的数据,是很费时的,表也会被锁定,系统要处理日志
    建议将事务分散,比如在添加记录的时候跟踪删除一条记录