我的表一直在用,不能停。表中数据库有三千多万条记录,现在每天以三万条左右的记录增加. 我想把表中2011年以前的记录都清空。 我处理的办法是 :  1.先备份表 .
  2.delete from  表名  where  时间 < 2011-01-01 但是表中记录太多,我觉得这方法怕破坏表结构.
 请问还有其它好办法清理表数据吗?

解决方案 »

  1.   

    select * into #t from 表名 where 时间>='2011-01-01'truncate 表名insert into 表名 select * from #t
      

  2.   

    截取时间字符串啊。
    delete from 表明 where SUBSTRING('2011-01-01',0,5)<2011
      

  3.   


    truncate 表名 --------表一直在用. 不能动表。。
      

  4.   

    那你还是老老实实的delete吧
      

  5.   

    表需要select操作吗?如果一段时间内(比如几小时)不需要select,而是只用来插入,那可以这样:
    1 建一张同样结构的表。
    2 修改程序,把新数据插入到这张新表里
    3 delete原表数据。
    4 把新数据插入回原表。
    delete操作时,建议一次少删除一些,比如只删除1000条,或只删除一天的数据。不然插入操作容易长时间被锁而失败。
    我也有个表,要定时手工delete操作,我是这样做的。
      

  6.   


    select * into #t from 表名 where 时间>='2011-01-01'delete from 表名insert into 表名 select * from #t如楼上建议 你可以分次删除
      

  7.   


    --> 测试数据:[表1]
    if object_id('[表1]') is not null 
    drop table [表1]
    create table [表1](
    [字段1] varchar(1),
    [字段2] varchar(1)
    )
    go
    insert [表1]
    select 'a','a' union all
    select 'b','a' union all
    select 'c','a' union all
    select 'd','b' union all
    select 'e','a' union all
    select 'f','c' union all
    select 'g','c'
    go
    select * from [表1]
    /*
    字段1 字段2
    a a
    b a
    c a
    d b
    e a
    f c
    g c
    */
    --truncate用于清空表的记录
    truncate table [表1]select * from [表1] 
    --表结构存在,记录全部清空
      

  8.   

    如果楼主建立的是Partation table的话就好办了,直接把相应的分区switch out出来然后drop就可以了
      

  9.   

    看你机器性能如何了,性能好的,直接 DELETE FROM TABLENAME WHERE DATE<'2011-1-1'每天3万条的话你11年之前的数据也没多少.如果你机器性能不好,又怕影响业务,那你只能逐步逐步调整时间参数,一个月,或者几个月一删,
      

  10.   

    删之前备份一下数据库呗,或者复制一下这个表,再删,delete不会破坏表结构的,好几千万的数据我都是delete from tablename where rq>=''
      

  11.   

    根据用户所提需求过滤需要删除的源数据,create 临时表 as select rowid rid from 需要删除的表 where 删除条件。
      

  12.   

    对于大表,建议你还是不要一部删到位,删除的记录太多了,有可能temp空间及回滚空间不够用了,导致整库
    当掉了,先统计下2011-1-1之前有多少数据,再分批删除,一次删除5w行,分批进行,如果删除的数据占用了表
    50%的数据,建议你还是先把不删除的数据转移到一个表里面,然后 truncate表,再把数据倒过来,delete操作
    会给表留下很多的碎片。删完建议收缩
      

  13.   

    我觉得你可以建一个JOB,然后执行几次,我们现在的线上有这样的数据。就是表数据量不用的情况下,和业务确认,然后只保留需要的几个月或者几年的数据,其它的数据可以除到备份的库里面,或者就是删除。不要一次删除太大的数据,可以选择批量会更好。
      

  14.   

    delete from 表名 where 时间 = 2010-01-01;
    go;
    delete from 表名 where 时间 = 2010-01-02;
    go;
    ... ...
    一天一天的删