数据表中50000条数据
SELECT id FROM t_test_rand ORDER BY RAND() LIMIT 1;
直接使用 RAND()函数 查询速度
优化方案一
SELECT * FROM `t_test_rand` AS t1
JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `t_test_rand`)-(SELECT MIN(id) FROM `t_test_rand`))+(SELECT MIN(id) FROM `t_test_rand`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 1;
优化方案二
SELECT * FROM t_test_rand JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM t_test_rand)) AS id) AS t2 USING (id);
涉及到的mysql的函数
RAND() 产生一个在 0 和 1 之间的随机数
ROUND() 此函数返回x舍入到最接近的整数。如果第二个参数,D有提供,则函数返回x四舍五入至第D位小数点。D必须是正数或全部右边小数点的数字将被删除
CEIL() 该函数返回的最小整数值,但不能小于X
USING() 等价于join操作中的on