从MySQL数据表中查询一条随机的记录。
- 前提知识点
SELECT RAND(); #返回0~1之间的16位小数 SELECT MAX(ID) FROM table; #返回table中ID列最大的值 SELECT MIN(ID) FROM table; #返回table中ID列最小的值 SELECT CEIL(4.1); #向上取整 SELECT FLOOR(4.1); #向下取整
- 方式一
将数据随机按表中其中一列排序,取排序后的第一条SELECT * FROM foo ORDER BY RAND() LIMIT 1当数据表中数据量较小时,此方法可行。但当数据量到达一定程度,比如100万数据或以上,就有很大的性能问题。
如果你通过EXPLAIN来分析这个 语句,会发现虽然MySQL通过建立一张临时表来排序,但由于ORDER BY和LIMIT本身的特性,在排序未完成之前,我们还是无法通过LIMIT来获取需要的记录。
亦即,你的记录有多少条,就必须首先对这些数据进行排序.
- 方式二
- 使用主键索引,避免全表扫描
- 使用随机区间过滤,返回区间内的第一条数据
SELECT * FROM `table` WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`))) ORDER BY id LIMIT 1;