我们有个库,有400G目前,有最近2年的,目前要删除掉1年前的数据,由于数据分布比较均匀,只能直接在表里删除,我测试过多次发现,只有将每天的数据分为24小时,一个小时一个小时的删除,系统的性能影响是最小的。我想象各位了解,有没有其它更快的数据删除办法?另外,如果这些数据都删除了,而且索引也重新建立,收缩文件和日志后,是否数据文件之前分配的那些空间都可以回收?

解决方案 »

  1.   

    SQL 2005的话可以考虑表分区的方式,按时间分区,每个分区在一个数据文件中,删除某一分区的数据只需要讲那个数据文件删除就可以了,十分高效,但这时要在设计时做的,现在有点晚了。另一种方案是按时间建立很多表,分别存放不同时期的数据,在建立一个视图将这些表UNION ALL,并在时间列上加约束,程序访问视图,这是sql2000时的分区表做法。oracle很早就支持分区表了,分区表的一个主要用途就是你现在面临的问题,可以很轻松的移除掉历史数据
      

  2.   

    你遇到的问题和我一样,我 昨天刚把数据移动了还没有收缩数据库,今天看了备份文件少了10个G(以前备份文件有50个G,现在只有37个G,收缩后应该会节约点空间