我有一个数据库,其中一个表人满为患(465025579条记录),删除记录并只保留3个月的记录的最佳方法是什么,没有设备挂起?
按日期最早优先批量删除。当然,这需要一些时间,但它更安全(因为您正在定义要删除的内容),而且不那么耗费资源。这也意味着你可以批量收缩数据库,而不是一次大的收缩(这是相当资源密集的)。
是的,它可能会使数据库碎片化一点,但是在您将实际数据降低到可管理的水平之前,您不能做那么多。
公平地说,200G的数据在现在一台像样的机器上并不多。
说了这么多,我假设你想让数据库保持在线
如果您在执行此操作时不需要数据库可用,那么最简单的方法通常是选择您想要保留到另一个表中的行,在此表上运行TRUNCATE
,然后将保存的行复制回。
源自TRUNCATE
:
TRUNCATE TABLE类似于没有WHERE子句的DELETE语句;然而,TRUNCATE TABLE更快,使用更少的系统和事务日志资源。