1)使用join 和 rand() 耗時 0.009
SELECT * FROM `t_topic` AS t1 JOIN ( SELECT ROUND( RAND() * ( (SELECT MAX(id) FROM `t_topic`) - (SELECT MIN(id) FROM `t_topic`) ) + (SELECT MIN(id) FROM `t_topic`) ) AS id ) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id LIMIT 10;
2) 下面這條比上面那個還要慢幾秒
SELECT * FROM `t_topic` WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `t_topic`)-(SELECT MIN(id) FROM `t_topic`)) + (SELECT MIN(id) FROM `t_topic`))) ORDER BY id LIMIT 10;
3)或者使用下面這個也可以測試也是 耗時0.0012
SELECT * FROM `t_topic` WHERE id >= ( SELECT floor( RAND() * (SELECT MAX(id) FROM `t_topic`) ) ) ORDER BY id LIMIT 10;
轉自:https://www.cnblogs.com/wanglijun/p/8926371.html