数据表描述:一张生产表, 数据量在 150W条数据,但是ID 递增已经到了 3000W了,因为中间一致被人DELETE 数据,但是ID一致在递增。现在就形成了 ID 1-50000是没有的, 50000-100000是在表里面的,后面也是这种断断续续的存在和不存在,但是数据递增还是3000W往后。
问题描述:查询效率特别低下,做数据迁移,已经将150W条数据 压缩到 10W条数据,但是效率还是低下,CPU使用率特别高。多个子系统使用 SELECT * FROM TABLE 语句。
结果猜测:SELECT *FROM 这种查询默认表里面 还是 3000W+ 数据 并不是实际 10W条数据,有没有什么好的方案 对这种生产库的表 做数据迁移?
解决现有数据方法:把表数据全盘导出本地,移除ID列。重新insert生成一遍(要保证该ID号 没有被其他表所关联。否则这么整 就乱套了);
解决后续新插入数据:改逻辑。弃用自增,新建列、使用自定义生成序列号。记得加索引
同 期待他人更好的方案
不要select * from
建索引啥的
把这个表数据备份的其他表中,然后做个映射以保存老数据?
表分区啥的
id不要数字
我不是干数据库的,但是我见大佬这么做过
如果你的ID是主键,就算中间缺了是不会影响查询效率的,最多影响的是插入的时候,需要重建B树,有点影响,
稳定以后,根本不会对查询效率有影响