因为说了1000W,如果直接用select * from table  where RADOM() limit 10 估计不行,效率上肯定不能接受。不是都说random()函数效率有问题,不知道是与否?

解决方案 »

  1.   

    个人见解,mysql里面order by rand() limit xx是很好资源的,如果是线下用于数据分析倒还好,如果线上可能不能接受。最好的方式应该是用程序生成随机数组,然后直接去取,where id=xx
      

  2.   

    纯粹用数据库的话,思路也是一样,先生成10个随机数,然后select
    这里用了round函数不知道会不会对结果产生偏差。SELECT ROUND(RAND()*10000000,0) into @rand1;
    select * from tbxxx where id=@rand1;循环10次。这是我能想到的最好办法了。
      

  3.   

    mysql随机数的分析,请参考:http://blog.csdn.net/mchdba/article/details/38925129这样子取,通过主键>一个随机数自增数,然后取10条:  SELECT * FROM tablename WHERE id> ROUND(1+10000000*RAND()) LIMIT 10;这样既随机了,又保证了每次都走索引的。
      

  4.   

    建议在JAVA程序中先生成十个随机数,然后再由这些随机组分十次取出int x=rand()*100000select * from t where id>x order by id limit 1这样效率上应该是最好的。
      

  5.   

    MYSQL最好的教材就是它的官方手册。不过最新的版本没有中文版
      

  6.   


    mysql书籍,mysql高性能第三版。
      

  7.   

    id,是自增列的话,在前台取10个随机数,
    然后用 id in(,,,,) 的形式,也是瞬间出结果的事情
      

  8.   


    昨天碰到的一道面试题。。尼玛,一面数据库,必挂分组排序:http://blog.csdn.net/mchdba/article/details/22163223