mysql 隨機從表中獲取一條或幾條數據

最近工作中遇到一個需求是定時查詢用戶表,並隨機獲取其中的一條信息,因爲剛從oracle轉MySQL,對mysql沒那麼熟悉,所以上完檢索了一下,大概有幾種方案:

方法一、最原始,最直觀的語法

SELECT * FROM tableName ORDER BY RAND() LIMIT 1 

不過這種方式極不推薦,因爲試過,查詢效率極低

方法二、(花費時間 0.147433 秒 )

SELECT * FROM `table` 
WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))  
ORDER BY id LIMIT 1; 

方法三、(花費時間 0.015130 秒 )

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

總結:方式二和方式三都是效率很高的,不過通過對比,明顯方式三更勝一籌,看來採用JOIN的語法比直接在WHERE中使用函數效率還要高很多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章