Answers
类似的事情做过一次,当时数据会更多一点,有几亿,按userid 取模100分表的,大概过程是这样的:
1.我可以很容易获得我的useid的最大最小值:min_userid,max_userid。这样粗略认为总表的的userid范围为userlist = [min_userid...max_userid]
2.随便用个脚本把userlist处理(mod或者hash)为100个分组:arr0 ... arr99
arr0为[0,10,20,30 ...]
3.根据 2 的结果拼接100个sql语句.
insert into tb_user_0 (select * from tb_user_all where userid in(arr0));
insert into tb_user_1 (select * from tb_user_all where userid in(arr1));
...
insert into tb_user_99 (select * from tb_user_all where userid in(arr99));
4.批量执行。当时几亿不到20分钟就都搞定了。要比逐条数据处理快很多。
注:userid是有索引的。
上条当麻的右手
answered 12 years, 10 months ago