mysql 从多少行开始删除_滚动从MySQL删除旧行的最佳方法是什么?

与其仅对表执行删除,不如先尝试收集匹配的键,然后再执行DELETE JOIN

给您上面的示例查询

DELETE FROM my_table WHERE time_stored < 1234567890 LIMIT 100 ;

您可以将LIMIT排除在外。

假设您要删除超过31天的数据。

让我们以秒为单位计算31天(86400 X 31 = 2678400)

从密钥收集开始

接下来,索引键

然后,执行DELETE JOIN

最后,放下收集的键

这是算法

CREATE TABLE delete_keys SELECT id FROM my_table WHERE 1=2;

INSERT INTO delete_keys

SELECT id FROM

(

SELECT id FROM my_table

WHERE time_stored < (UNIX_TIMESTAMP() - 2678400)

ORDER BY time_stored

) A LIMIT 100;

ALTER TABLE delete_keys ADD PRIMARY KEY (id);

DELETE B.* FROM delete_keys

INNER JOIN my_table B USING (id);

DROP TABLE delete_keys;

如果密钥收集少于5分钟,则每5分钟运行一次此查询。

试试看 !!!

更新2012-02-27 16:55 EDT

这是一些应该加快密钥收集速度的事情。 添加以下索引:

ALTER TABLE my_table ADD INDEX time_stored_id_ndx (time_stored,id);

这将更好地支持填充delete_keys表的子查询,因为它提供了覆盖索引,以便仅从索引检索字段。

更新2012-02-27 16:59 EDT

由于您必须经常删除,因此您可能需要每两个月尝试一次

OPTIMIZE TABLE my_table;

所有这些烦人的小删除每5分钟删除两个月后,这将对表进行碎片整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值