从大表中删除数据

Ron*_*fca 5 sql

我有一个包含大约10个字段的表,可以为客户存储gps信息.随着时间的推移,我们已经增加了更多的客户,表已经增长到大约1400万行.随着gps数据进入服务,不断地在表中插入一行.90%的数据并不令人满意,即客户并不关心3个月前车辆的位置,但最新的数据用于生成跟踪报告.我的目标是编写一个sql来执行清除超过一个月的数据.

这是我的问题,我不能使用TRUNCATE TABLE,因为我会失去一切?昨天我用where子句写了一个删除表语句.当我在测试系统上运行它时,它锁定了我的表,并且模拟gps插入间歇性地失败.此外,我的事务日志在尝试记录每次删除时增长到超过6GB.

我的第一个想法是从最早的第一个开始一点一点地删除数据,但我想知道是否有更好的方法.

Jho*_*re- 10

我的2美分:

如果您使用的是SQL 2005及更高版本,则可以考虑根据日期字段对表进行分区,以便在删除旧记录时不会锁定表.

也许,如果您处于做出dba决策的位置,您可以暂时将您的日志模型更改为简单,因此它不会增长太快,它仍然会增长,但日志不会太详细.


Eri*_*ric 5

尝试这个

WHILE EXISTS ( SELECT * FROM table WHERE (删除条件))

BEGIN
SET ROWCOUNT 1000
DELETE Table WHERE(删除条件)
SET ROWCOUNT 0
ENd

这将删除以 1000 为一组的行