在mysql中帶了隨機取數據的函數,在mysql中我們會有rand()函數,很多朋友都會直接使用,如果幾百條數據肯定沒事,如果幾萬或百萬時你會發現,直接使用是錯誤的。下面我來介紹隨機取數據一些優化方法。
- SELECT * FROM table_name ORDER BY rand() LIMIT 5;
復制代碼
rand在手冊里是這么說的:
RAND()
RAND(N)
返回在范圍0到1.0內的隨機浮點值。如果一個整數參數N被指定,它被用作種子值。
- mysql> select RAND();
- -> 0.5925
- mysql> select RAND(20);
- -> 0.1811
- mysql> select RAND(20);
- -> 0.1811
- mysql> select RAND();
- -> 0.2079
- mysql> select RAND();
- -> 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
