MySQL 使用 LIMIT 或 WHERE 删除记录

MySQL delete records using LIMIT or using WHERE

我正在尝试找到删除 MySQL 数据库中数百万条记录的最佳方法。 我有一个 table,在 ID 上有一个主键,在 'date' 列上有一个索引,我的删除查询如下:

DELETE FROM table WHERE date < '<today - 6 months>';

它在从服务器上产生了很多延迟。

我有两个选择:

DELETE FROM table WHERE date < '<today - 6 months>' LIMIT 1000;

包括进一步索引或使用 PK 进行删除。

我想听听你的意见。如果使用 LIMIT 不会改变工作量,或者如果使用 PK(与 LIMIT 结合使用)更好。

删除大量行的最佳方法,尤其是在复制设置中,是以 1000 行为一组通过 PRIMARY KEY 遍历 table。

详情见this

如果这是一个周期性任务,那么 'time series' PARTITIONing 就更好了。 (尽管在您设置分区之前它不会有帮助。)参见 this