先看手册中的sql:
SELECT * FROM table_name ORDER BY rand() LIMIT 5;
描述:
RAND()
RAND(N)
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
mysql> select RAND(); -> 0.5925 mysql> select RAND(20); -> 0.1811 mysql> select RAND(20); -> 0.1811 mysql> select RAND(); -> 0.2079 mysql> select RAND(); -> 0.7888
注意:
不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。
然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的随机样本。注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。
下面这个是优化后的代码:
SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;
您可能感兴趣的文章:
mysql随机查询的经验分享
分享:mysql随机查询若干条数据的方法
解析mysql实现随机查询的几种方法
mysql随机查询大量数据的sql语句性能分析
mysql 随机生成某个范围内的整数
mysql全文查询与随机查询的例子
mysql随机取数据的几种方法
mysql随机查询记录的效率测试笔记