暂无图片
分享
伤城
2021-04-20
mysql库,有个表390G,数据量18亿。

现在想清理这个表,只保存3个月内数据。有啥好办法么,现在按时间查,查两天内数据,已经一查询,sql就卡住了,跑了五分钟跑不出来了。

求方法

收藏
分享
6条回答
默认
最新
cqiwen

这个表是否一直有数据更新或写入?
如果有,则先和应用那边协商,找个时间停一下对这个表的数据的dml操作。
然后创建一个相同表结构的表,查询出3个月内的数据,将其insert到新表中。
备份旧的表后直接drop旧的表。

暂无图片 评论
暂无图片 有用 0
伤城

这个表,只有每天晚上批处理有写入操作。
但是我目前只查询一天的数据查询了二十分钟了,都没有查询出来。
写个脚本后台insert么?什么时候insert进去,就等着就行了?
我了解到mysqldump也有按条件导出的功能,这个功能会比正常查询快么?

暂无图片 评论
暂无图片 有用 0
cqiwen

只查一天的都查不出来,太不正常了。这种情况应该检查下是不是有坏块了?建议还是先mysqldump把整个表备份出来,然后恢复到另外一台机器上再操作试试。

暂无图片 评论
暂无图片 有用 0
老紫竹

18亿,3个月,按100天估算,每天200万行。
如果你就一张大表,还是建议按天建分区表。

暂无图片 评论
暂无图片 有用 0
Xiang

按时间查询到的话时间字段有和索引么?
如果时间字段不方便做索引的话可以写个脚本,每次基于主键循环推进取一段范围的值配合where条件进行删除

暂无图片 评论
暂无图片 有用 1
伤城
问题已关闭: 问题已经得到解决
暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏