首页 > 解决方案 > MySQL 使用 LIMIT 或 WHERE 删除记录

问题描述

我正在尝试找到删除 MySQL DB 中数百万条记录的最佳方法。我有一个在 ID 上带有 PK 的表,在“日期”列上有一个索引,我的删除查询如下:

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

它在从站上产生了很多延迟。

我有两个选择:

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

或者

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

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

标签: mysqlindexingdelete-row

解决方案


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

有关详细信息,请参阅

如果这是一项重复性任务,那么“时间序列”PARTITIONing会更好。(尽管在您设置分区之前它无济于事。)请参阅this


推荐阅读