mysql中隨機(jī)記錄的函數(shù)是rand()這個(gè)函數(shù)對(duì)于幾百條數(shù)據(jù)通常是看不出問(wèn)題,但上萬(wàn)了就會(huì)有些問(wèn)題了,下面我們一起來(lái)看一朋友面試題得出來(lái)的一些更好的辦法.
今天去蘇州的一家網(wǎng)絡(luò)建設(shè)公司面試,老板給了我一道題目:php中如何從數(shù)據(jù)表products中隨機(jī)取出一條數(shù)據(jù)?
當(dāng)然最后我的一段代碼有錯(cuò)誤的,并不是真正意義上的隨機(jī)取數(shù)據(jù),回到家,趕快百度,這才知道了如何隨機(jī)取數(shù)據(jù)..
其余代碼不多說(shuō),這里就告訴你這句核心查找數(shù)據(jù)表代碼:
select * from 表名 order by rand( ) limit 1;//此處的1就是取出數(shù)據(jù)的條數(shù).
但這樣取數(shù)據(jù)網(wǎng)上有人說(shuō)效率非常差的,那么要如何改進(jìn)呢,搜索Google,網(wǎng)上基本上都是查詢max(id) * rand()來(lái)隨機(jī)獲取數(shù)據(jù),代碼如下:
- SELECT *
- FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
- WHERE t1.id >= t2.id
- ORDER BY t1.id ASC LIMIT 5;
但是這樣獲得的是5條連續(xù)的記錄,解決辦法只能是每次查詢一條,查詢5次,但這個(gè)又不能滿足我的要求了,我要一次找?guī)讞l,高效寫(xiě)法,代碼如下:
- SELECT * FROM user WHERE userId >= ((SELECT MAX(userId) FROM user )-(SELECT MIN(userId) FROM user )) * RAND() + (SELECT MIN(userId) FROM user ) LIMIT 5//開(kāi)源代碼Vevb.com
這樣測(cè)試發(fā)現(xiàn)滿足了我的要求同時(shí)測(cè)試10W數(shù)據(jù)也只要0.0幾秒非常的快.
新聞熱點(diǎn)
疑難解答
圖片精選