小雪3

sqlserver 亿级数据删除方案

sqlserver 删除百万级别及以上数据的时候需要考虑是否需要保留日志文件,如果需要保留日志文件,用于恢复。那么就要使用DELETE语句进行删除,DELETE删除语句尽量使用主键或者索引的字段,

同时进行批量删除语句如下:

 1 DECLARE @BatchSize INT
 2 SET @BatchSize = 10000 -- 设置每批删除的记录数量
 3  
 4 WHILE 1 = 1
 5 BEGIN
 6     DELETE TOP (@BatchSize) FROM YourTable
 7     WHERE YourIDColumn IN (SELECT TOP (@BatchSize) YourIDColumn FROM YourTable)
 8     IF @@ROWCOUNT < @BatchSize
 9         BREAK
10 END

如果说不考虑恢复日志,那么可以对表数据直接清空,如果表id是自增truncate语句会使表id从1开始。

1 truncate table 表名称         -- 清空表

表清空后,磁盘空间可能不会完全释放,这是因为InnoDB 中采用了 B+ 树作为存储数据的结构,也就是常说的索引组织表。在InnoDB中,delete操作并不会真的删除数据,SQL Server实际上只是给要删除的数据打了标记,标记为删除。磁盘所占空间不会变小,即表空间并没有真正被释放。可以使用一下语句进行空间收缩。

DBCC SHRINKDATABASE ( 数据库名称 )

删除表的语句效率对比:

delete 表名称 where 删除条件    -- 删除数据,执行效率低
drop table 表名称        -- 删除表,效率一般
truncate table 表名称         -- 清空表,效率高

删除数据主要就是是否考虑恢复。选择合适自己业务场景的方式对数据库进行相应的操作。

posted @ 2024-05-13 17:30  net小雪  阅读(90)  评论(0编辑  收藏  举报

小雪4