mysql 隨機擷取一條或多條資料

來源:互聯網
上載者:User

標籤:部分   val   min   高效   ack   asc   back   讀取資料   最大   

若要在i ≤r≤ j 這個範圍得到一個隨機整數r ,需要用到運算式 FLOOR( RAND() * (j – i)+i),RLOOR()取整樹部分,RAND()、ROUND(x,n)四捨五入取整,ROUND(x,n)表示隨機產生一個 0~x 之間的n位小數的數字。

例如, 若要在7 到 12 的範圍(包括7和12)內得到一個隨機整數, 可使用以下語句:

SELECT  FLOOR(RAND()*(12-7)+7) 

從 Mysql 表中隨機讀取資料不難,方法還挺多的,但是如果要考慮效率,得到一個快速的高效率的方法。

隨機獲得Mysql資料表的一條或多條記錄有很多方法,下面以users(userId,userName,password……)表,百多萬條以上記錄為例:

1、常規使用方法

SELECT * FROM  users  ORDER BY RAND() LIMIT 1

結論:效率最慢,在 ORDER BY從句裡面不能使用RAND()函數,因為這樣會導致資料列被多次掃描,導致效率相當相當的低!

2、SELECT * FROM users AS U0

JOIN

(SELECT FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM user AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3)) AS userid ) AS U4 

ON U0.userid>= U4.userid 

 LIMIT 1

結論:隨機一條資料效率還行,多條就不行

3、通過sql獲得最大值和最小值,然後通過php的rand產生一個隨機數randnum,再通過SELECT * FROM users WHERE userId >= randnum LIMIT 1

SELECT * FROM users WHERE 

users.userid>= FLOOR( RAND()*((SELECT MAX(U1.userid) FROM users AS U1)-(SELECT MIN(U2.userid) FROM user AS U2) ) +(SELECT MIN(U3.userid) FROM users AS U3)) 

ORDER BY users.userid ASC 

LIMIT 1

結論:隨機取一條或多條記錄,方法都不錯! (最佳方案)

 

附:field(column,value1,value2,value3,……) 代表根據column列自訂的順序排

 

mysql 隨機擷取一條或多條資料

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.