单表行数超过 9700w,由于业务需求导致查询效率较低(代码不是楼主写的,也不想动,查询代码比较简单,索引加的也 ok )
实际业务需求只需使用最近一段的数据,估计约 500w 行,所以现打算把历史数据删除并创建自动删除任务,以为这样就可以优化性能。
但用 delete 删除历史数据以后发现 select * from table order by id(primary) asc 的速度变得十分慢(删数据之前很快),查资料发现 mysql delete 操作只是修改标记,还需要 optimize table 才行。
然而该操作会锁表,而且时间很长(几分钟到几小时不等)。mysql 官方建议是复制要留下的数据到新表,然后改名替换旧表。但线上有多个服务依赖这个表,暂停服务成本不小,想请问高贵的 v 友们,有什么办法能解决这个问题?
问题简述: 优化数据库性能,原 9700w 行表保留最近 500w
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.