mysql中rand函数使用

需求是:从数据库中随机取出符合条件的几条数据;

可使用下面来随机获取5条数据

select * from table order by rand() limit 5

需要注意: 这种方式只适合本身数据比较少或者通过where条件符约束后数据量很少的情况下使用,因为order by rand()会整体排序,数据量比较大的时候速度很慢。

经测试在50W条数据中随机取需要十几秒的时间。

数据量比较大的优化方案

优化方案1

1. 取表id的最大值m、最小值n
2. 计算随机 r= (m-n)*rand + n
3. 取 id >= r 的第一个值
4. 重复2、3步,取需要的个数

缺点 id不保证是连续的,所以这个方案并不是严格的随机。

优化方案2

1. 取表的总行数 n
2. 1-n 之间取随机数多个..... ,进行排序得到从小到大 r1、r2、r3.....
3. `select * from table limit r1,1` 获取ID id1
  `select * from table where id > id1  limit r2,1` 获取ID id2
  `select * from table where id > id2  limit r3,1`

相比o`rder by rand()` 减少了扫描行数并且不用数据库做排序操作