MySQL 中隨機抽樣:order by rand limit 的替代方案


在mysql中帶了隨機取數據的函數,在mysql中我們會有rand()函數,很多朋友都會直接使用,如果幾百條數據肯定沒事,如果幾萬或百萬時你會發現,直接使用是錯誤的。下面我來介紹隨機取數據一些優化方法。

  1. SELECT * FROM table_name ORDER BY rand() LIMIT 5;
復制代碼

rand在手冊里是這么說的:
RAND()
RAND(N)
返回在范圍0到1.0內的隨機浮點值。如果一個整數參數N被指定,它被用作種子值。

  1. mysql> select RAND();
  2.         -> 0.5925
  3. mysql> select RAND(20);
  4.         -> 0.1811
  5. mysql> select RAND(20);
  6.         -> 0.1811
  7. mysql> select RAND();
  8.         -> 0.2079
  9. mysql> select RAND();
  10.         -> 0.7888
復制代碼

你不能在一個ORDER BY子句用RAND()值使用列,因為ORDER BY將重復計算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),這是有利於得到一個來自SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000的集合的隨機樣本。注意在一個WHERE子句里的一個RAND()將在每次WHERE被執行時重新評估。

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

http://www.thinkphp.cn/topic/5206.html

 

http://my.oschina.net/leejun2005/blog/99167

 


免責聲明!

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



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