mysql高效率隨機獲取n條數據寫法


今天做項目遇到這個問題,本來想用mysql自帶的隨機函數來實現,但是想到這樣做功能是實現了,但是效率真的好差!一下子想不到好的方法,就去網上找了一下,記錄下來,好好研究學習一下。

ID連續的情況下(注意不能帶where,否則結果不好):

SELECT *
FROM `talbe` 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 4;

ID不連續的情況下:

SELECT * FROM `table` 
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))  and a = "a" and b = b
ORDER BY id LIMIT 4;

假設你的表叫做mm_account,並且有一個字段叫id。最快的方法如下(隨機獲取5條):

SELECT * FROM talbe WHERE id >= ((SELECT MAX(id) FROM table)-(SELECT MIN(id) FROM table)) * RAND() + (SELECT MIN(id) FROM table) limit 5;

如果帶where語句,上面就不適合了。帶where語句請看下面:

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (
(SELECT MAX(id) FROM `table` where id < 1000 )-(SELECT MIN(id) FROM `table` where id < 1000 ))+(SELECT MIN(id) FROM `table` where id < 1000 )) AS id) AS t2
WHERE t1.id >= t2.id
ORDER BY t1.id LIMIT 5;


免責聲明!

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



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