select *
from tb
order by newid()

解决方案 »

  1.   

    反正你每次都要读取全部的 200万条数据记录, 所以没什么需要优化的两种方法
    一、 直接 select * from 数据表 order by rand(); 然后进行分配。
    二、 直接 select * from 数据表 然后在程序中产生 1-10 的随机分配,由于你是 200万条数据,所有自然分布概率会把这些记录平均分配到10个业务员。第二种效率要高。
      

  2.   

    首先先谢谢前面2位的回答,ACMAIN_CHM的第二种方法我用过,发现其实没有办法真正做到平均分配
      

  3.   

    如果一定要 严格的平均分配。
    则高效的一种方案是采用与第二种相同的方案 
    select * from 数据表
    然后在程序中生成1-100的一个随机数列,再按照产生的这个随机数列,把记录分配到不同的1-10号业务员。这种方案可以做到严格平均,但无法实现严格意义上的随机。
      

  4.   

    恩,那再次请教ACMAIN_CHM,换一种问法,如果非要重新更新200万条数据,你觉的mysql需要多长时间怎么做才是最高效的
      

  5.   

    再次提问ACMAIN_CHM如果用存储过程实现,会不会比程序来实现来个更高效?
      

  6.   


    ID,PHONENUM
    1  132...
    2  133...
    200WAN 139...表里这样存储,获取随机的ID,取10万条,为什么需要更新ID字段内容呢?
    select * from 数据表 order by rand() limit 10万; 
      

  7.   

    回复zuoxingyu,用rand() 每次都是随机的可是我需要的是在3个月内客户分到到号码都是一样的在下一次(也就是下次的3个月后)才重新再随机分配