MariaDB/MySQL从数据库中选择随机的行
一个比较传统的做法是使用sql自带的rand函数,从而达到随机排序的目的。
SELECT column FROM table ORDER BY RAND() LIMIT 10;
但是上面的rand会被多次调用,如果表的行数很多的话会比较慢。我在200万行的数据库中执行查询,需要20秒才能出结果
一个快一些的方法是:
SELECT column FROM table where RAND() > 0.9 ORDER BY RAND() LIMIT 10;
在我的机器上,这条语句可以减少25%的查询时间,只要15秒就行了。
15秒还是太慢了.
如果表的主键是递增的数字,且中间没有间隔,可以使用如下命令:
SELECT t.* FROM myTable AS t JOIN
(SELECT ROUND(RAND() * (SELECT MAX(id) FROM myTable)) AS id)
AS x WHERE t.id >= x.id LIMIT 1;