MySQL-希望逐步删除少于x的行数的任何内容

问题描述 投票:0回答:1

我有一个肿的表,没有时间戳字段。因此,我想出的清理此表的最佳方法是保留最近的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

有什么想法吗?

mysql max limit sql-delete
1个回答
0
投票

怎么样:

DELETE
FROM tblBloat
ORDER BY timestamp_col desc
LIMIT 7000000, 500 

这将结果集按timestamp_col排序,跳过最近的7000000,然后删除下一个500。

关于此查询的好处是,您可以使用完全相同的LIMIT子句重复运行它,直到您的数据集仅包含7000000条记录。

© www.soinside.com 2019 - 2024. All rights reserved.