MariaDB/MySQL从数据库中选择随机的行

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;

猜你喜欢

转载自blog.csdn.net/zhangpeterx/article/details/89395706