需求描述
经理来找我说:发票查验表[XT_FpRecord]的字段[FpInfo]是记录了每次查验的内容,类型是text,因为存在异常值,已经出现了问题,问我能怎么清理下历史的记录中的字段[FpInfo]的值。
分析过程
1、确认数据量大小
2、检查表索引情况
3、思考解决方案
第一步确认了,表记录数达到64465713,
第二步确认了,表的数据空间:294,663.672 MB
第三步:考虑到几个方案:1)分区;2)把字段置空
经过翻书,咨询朋友,百度了关于SQL server的分区表,发现有点麻烦。另外尝试了update 1万多条记录,执行耗时不久。且经理反复确认,这个字段的值超过3个月是无用的可以清理。最终采纳方案2)把字段置空。故通过下面的while循环代码,分了3次执行【也可以一次性执行,只是想看看耗时所以分批了】,总共耗时约25个小时完成。
while循环【其他语言的for循环】
DECLARE @i INT = 32500001
DECLARE @max INT=47111261
WHILE @i<=@max
BEGIN
UPDATE [dbo].[XT_FpRecord] SET [FpInfo]=’’ WHERE ID=@i;
–PRINT(@i);
–SELECT * FROM [dbo].[XT_FpRecord] WHERE ID=@i;
SET @i=@i+1;
END
日志清理方法
把库的恢复模式改成:简单,执行 收缩文件,选择日志即可
按日期循环删除数据
DECLARE @startdate date = ‘2020-08-30’;
WHILE @startdate <= ‘2021-12-31’
BEGIN
–PRINT @startdate;
– insert into [dbo].calendar values(@startdate);
delete from XT_FpRecord where [CreateTime]<=@startdate;
SET @startdate = DATEADD(DAY, 1, @startdate);
END




