本帖最后由 mumubangditu 于 2012-03-06 17:14:57 编辑

解决方案 »

  1.   

    这样没办法,因为你的是整段的ID被清除 ID=14794 - ID=22856 这样不是平均分布,无法利用RAND随便来查询ID。 你需要用其它算法。如果你的表结果中是固定已知少了这一段,则可以跳过这一段。
      

  2.   

    汗~~问题是我的表少的不止这一段,万能的狼头大哥,其它算法是指什么?有没有可用的代码?
    或者实在麻烦的话,如何重编 auto increase 的 ID号?谢谢。
      

  3.   

    如何重编 auto increase 的 ID号?
    备份数据->清空表->ALTER TABLE dd AUTO_INCREMENT = 1->导入数据
      

  4.   

    为什么要引用r2表直接
    SELECT MAX(id)*rand() FROM `my_table`;
      

  5.   

    天啊,一定要倒进倒出那么复杂的吗?29W条记录,好几百MB呢……
    这个方法太原始了吧……
      

  6.   

    你的问题简化来说就是1
    2
    3
    9
    10
    17
    19这么几个数中实现随机取记录,但你的记录是 30万条,无法直接用 select * from table1 limit X,1 (不过你还是可以试一下效率)
    想不出什么好的算法。
      

  7.   

    网上找了一个重编ID的方法SET @num := 0;
    UPDATE your_table SET id = @num := (@num+1);
    ALTER TABLE your_table AUTO_INCREMENT =1;帮忙看看有没有风险?
      

  8.   

    会把数据库弄乱。虽然有备份,但是用的是VPS,有速度限制,流量限制,所以我非常不愿意像3楼所说的那样,清空后再重新编号。