mysql如何将数据高效分表?


有一个大数据表(数据量上千万),现在想做分表处理,现在设计的做法是使用php程序,根据每列数据的主键user_id值计算出00-63的64个hash值,散列到64个表中,请问在将数据导至新的分表时,除了将每一条数据计算出hash值,再插入到新表的方法外,有没有更高效的方法?

mysql 算法 性能

大熊猫的下面 12 years, 10 months ago

类似的事情做过一次,当时数据会更多一点,有几亿,按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

Your Answer