单表近 7 亿条数据,现在要优化结构,进行去重,求个方案

2020-05-29 10:37:09 +08:00
 FONG2
以前设计是以请求编号为主键的,现在优化后以用户编号为主键,那么就存在大量重复数据了。
现在用 sql 查一下都得等半天,请问有啥好方法处理么
6117 次点击
所在节点    数据库
58 条回复
liuxu
2020-05-29 10:46:19 +08:00
楼下,多列覆盖索引能救 7 亿吗
fixend
2020-05-29 10:54:12 +08:00
去重的规则是啥?随意选择一条?用 insert into `table2` select * from `table1` group by `id` 这样?
ID 必须是建一个非唯一索引,但估计也得跑很久很久很久 * N
newtype0092
2020-05-29 10:54:46 +08:00
楼上分个表不是美滋滋?
fixend
2020-05-29 10:56:14 +08:00
@liuxu 不行

@newtype0092 不美
reus
2020-05-29 10:57:36 +08:00
这还要问?除了加索引你还能干嘛?自己不会试验吗?要不你给个 ssh 让大家连上去给你优化优化?
Egfly
2020-05-29 10:59:17 +08:00
把原表 copy 一份,然后建个临时表,慢慢处理完,再替换原表?
dog82
2020-05-29 11:01:59 +08:00
写代码清洗插入新表,写 sql 估计不行
FONG2
2020-05-29 11:08:08 +08:00
@dog82 写代码,我感觉也得跑几天几夜。。。现在执行一条去重 sql 都跑不出结果
FONG2
2020-05-29 11:09:27 +08:00
@reus 之前求了个 datax 迁移数据 很好用!现在也来看看有没有类似工具。索引原来就有,不过没啥效果 量太大
wysnylc
2020-05-29 11:10:39 +08:00
弄个大数据框架,慢慢洗
单靠数据库单表是做不到的
FONG2
2020-05-29 11:11:13 +08:00
@wysnylc 我也感觉 大数据是唯一出路了。。。
bugsnail
2020-05-29 11:13:56 +08:00
不要当这个表有 7 亿,你就当 7 百万数据,然后写个程序处理,写好之后,再把这个表分成 100 份就好,程序处理的结果放另外一张表里,这样估计是最好的处理方法了
Lonersun
2020-05-29 11:14:43 +08:00
1 、建立一张新表,用户编号为主键唯一索引;
2 、业务代码从老表读每一条数据,读到直接往新表插入,能插进去说明新表不存在,插不进去说明已存在,直接跳过
3 、跑完后用新表代替老表
如果不考虑数据实时更新的话这样是否可行?
bojue
2020-05-29 11:17:53 +08:00
@FONG2 之前听鹅厂的人说,7 亿数据只是备份花了一晚上
FONG2
2020-05-29 11:20:07 +08:00
@bugsnail 这样每次得出结果还是得不断去重吧,那么只是每次时间变短,最终时间不也差不多吗?
ysweics
2020-05-29 11:22:06 +08:00
1.上大数据清洗
2.好奇是什么数据,如果单表 7 亿数据,那么在单表 1 亿数据的时候就应该考虑后续方案了,盲猜是请求日志记录
FONG2
2020-05-29 11:23:34 +08:00
@Lonersun 可行是可行 感觉效率不行
不过我可以配合 datax 试试
FONG2
2020-05-29 11:28:21 +08:00
@ysweics yes 流水号 记录
Leanna
2020-05-29 11:34:26 +08:00
流水表还是要定期迁数据比较好
FONG2
2020-05-29 11:39:56 +08:00
@Leanna 我这很多系统搞不好比我学龄还长 不是出问题要处理 我都不知道有这个表存在

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/676577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX