mysql隨機查詢某一條數(shù)據(jù)

從MySQL數(shù)據(jù)表中查詢一條隨機的記錄。

  • 前提知識點
SELECT RAND();                          #返回0~1之間的16位小數(shù)
SELECT MAX(ID) FROM table;              #返回table中ID列最大的值
SELECT MIN(ID) FROM table;              #返回table中ID列最小的值
SELECT CEIL(4.1);                       #向上取整
SELECT FLOOR(4.1);                       #向下取整
  • 方式一
    將數(shù)據(jù)隨機按表中其中一列排序,取排序后的第一條
SELECT * FROM foo ORDER BY RAND() LIMIT 1

當數(shù)據(jù)表中數(shù)據(jù)量較小時,此方法可行。但當數(shù)據(jù)量到達一定程度,比如100萬數(shù)據(jù)或以上,就有很大的性能問題。
如果你通過EXPLAIN來分析這個 語句,會發(fā)現(xiàn)雖然MySQL通過建立一張臨時表來排序,但由于ORDER BY和LIMIT本身的特性,在排序未完成之前,我們還是無法通過LIMIT來獲取需要的記錄。
亦即,你的記錄有多少條,就必須首先對這些數(shù)據(jù)進行排序.

  • 方式二
  1. 使用主鍵索引,避免全表掃描
  2. 使用隨機區(qū)間過濾,返回區(qū)間內(nèi)的第一條數(shù)據(jù)
SELECT * FROM `table`  
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`))) 
ORDER BY id LIMIT 1;
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容