sql - 从大表中删除数据

标签 sql

我有一个包含大约 10 个字段的表来存储客户的 GPS 信息。随着时间的推移,随着我们添加更多客户,该表已增长到约 1400 万行。当 GPS 数据进入服务时,不断地将一行插入表中。 90% 的数据不相关,即客户不关心车辆 3 个月前在哪里,但最新的数据用于生成跟踪报告。我的目标是编写一条 sql 来清除一个月以上的数据。

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

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

最佳答案

我的2美分:

如果您使用的是SQL 2005及以上版本,您可以考虑根据日期字段对表进行分区,这样在删除旧记录时表就不会被锁定。

也许,如果你处于做dba决策的位置,你可以暂时将你的日志模型改为Simple,这样它就不会增长太快,它仍然会增长,但日志不会太详细.

关于sql - 从大表中删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/858800/

相关文章:

c# - Entity Framework ——底层SQL语句

mysql - asp.net sql从多个表中选择数据

sql - 如何找到存储过程调用?

sql - 表变量与临时表

sql - 使用 exec() 在 sp 内执行运行时查询时遇到错误 "The default schema does not exist."

php - 使用 php 将数据插入 pdf?

mysql - MySQL 中的 SELECT DISTINCT 或 GROUP BY 哪个更快?

c# - 向数据库中添加sql语句

sql - 拆分名字和姓氏,但仅在第一个空格上

python - 无论我尝试多少种不同的类型,插入语句永远不会起作用。 SQLite3 pyscripter