我有一个肿的表,没有时间戳字段。因此,我想出的清理此表的最佳方法是保留最近的7,000,000行(计算出大约1年的数据价值)。
我一直在尝试使用MAX(primary_id)-7000000并以500(LIMIT)为增量删除早于此的任何内容。
DELETE
FROM tblBloat
WHERE (Select MAX(primaryID) - 7000000 from tblBloat) > primaryID
ORDER BY primaryID desc
LIMIT 500
但是这将返回错误“您无法在FROM子句中指定目标表'tblBloat'进行更新。
也尝试过此方法,但是mySQL似乎不喜欢DELETE语句上的JOIN:
DELETE
FROM tblBloat
INNER JOIN (select MAX(primaryID) - 7000000 as 'max'
FROM tblBloat) ab
WHERE primaryID < ab.max
ORDER BY primaryID DESC
LIMIT 500
有什么想法吗?
怎么样:
DELETE
FROM tblBloat
ORDER BY timestamp_col desc
LIMIT 7000000, 500
这将结果集按timestamp_col
排序,跳过最近的7000000,然后删除下一个500。
关于此查询的好处是,您可以使用完全相同的LIMIT
子句重复运行它,直到您的数据集仅包含7000000条记录。