從mysql數據表中隨機取出一條記錄


核心查找數據表代碼:

select * from 表名 order by rand( ) limit 1;  //此處的1就是取出數據的條數

但這樣取數據網上有人說效率非常差的,那么要如何改進呢

搜索Google,網上基本上都是查詢max(id) * rand()來隨機獲取數據。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id ASC LIMIT 5;

但是這樣獲得的是5條連續的記錄。解決辦法只能是每次查詢一條,查詢5次,但這個又不能滿足我的要求了,我要一次找幾條

  高效寫法

SELECT * FROM user  WHERE userId >= ((SELECT MAX(userId) FROM user )-(SELECT MIN(userId) FROM user )) * RAND() + (SELECT MIN(userId) FROM user )  LIMIT 5

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM