有点时候,我们会需要随机选取表中的一个记录,以下有几种方法可以随机选择
1、select * from t where id >= rand limit 1
rand是一个随机值,
我们可以首先获取n = min(id)和m = max(id)
rand = n + rand()*(m-n);
rand是介于 最大 id 和最小id之间的一个id。
优点:
快速方便,只需要扫描三行记录就可以获取到
缺点:
如果id分布不均匀的话,会出现伪随机,也就是每个id被选取的概率不相等。比如1,2,4,5。4被选取的概率是比1,2,3,5大的。
2、select * from t limit rand,1
rand也是一个随机数,只不过与count有关
1、 select count(*) from t
2、 rand = (floor)count * rand()
优点:
完全随机
缺点:
需要count,count会从头到尾的遍历数据,效率较慢。
如果对随即效果要求不太高,或者id分布的很均匀的场景,建议使用
select * from t where id >= rand limit 1;