需求描述:现在有一张mysql数据表,数据量在1000万左右,需要增加一个字段,字段的值通过一个程序去生成.
存在问题:如果直接去遍历数据表,再通过程序一条记录、一条记录去生成该字段的值,估计得1、2天时间,如果采用多进程的话,我的想法是一个进程1处理0-100万这一个期间段的数据,进程2处理100-200万期间段数据,进程10处理900-1000万期间段数据,这样是否能显著地提高数据生成速度,数据库本身是否会堵塞,亦或采用多线程去处理?采用多线程处理有何优势?麻烦热心的朋友帮我解答一下。

解决方案 »

  1.   

    生成值不需要去操作数据库,生成后将其update到mysql表中,可以不考虑生成程序的性能,单纯从update mysql表角度来说,如何提高速度?
      

  2.   

    我晕.程序还没有写怎么知道要一两天.
    mysql更新正常每分钟20万左右.我说正常是指被更新的字段是常规的,不能说是blob这样的大对象.
    1000万记录一小时基本搞定.前提是记录本身应该有可以做为条件的索引.update tb set xx = xx where colname = xx;
    这个colname应该有索引,否则光在1000万条中定位记录本身就慢死了.最好不要用多线程,因为你现在并不是阻塞在运算上,而是阻塞在程序和数据数据库之间通讯的IO上.
    多线程也还是那点通讯能力.就是要用批操作,200到500次一个提交.
      

  3.   

    to axman 
    嗯,update的条件是索引字段,我也觉得瓶颈是在程序怀数据库之间的通讯上,
    做批量处理的,200~500一个提交,这里的确良200~500是根据什么算出的经验值,如果我设置为1000、10000呢?
    帮我解答一下,马上揭贴了 :)