隨機獲取Mysql數(shù)據(jù)表的一條或多條記錄

隨機獲得MySQL數(shù)據(jù)表的一條或多條記錄有很多方法,下面我就以users(userId失驶,userName土居,password……)表(有一百多萬條記錄)為例,對比講解下幾個方法效率問題:

  1. select * from users order by rand() LIMIT 1
    執(zhí)行該sql語句嬉探,老半天沒有反應(yīng)擦耀,最后被迫手動停止執(zhí)行,怎個傷人了得吧獭眷蜓!后來我查了一下MYSQL手冊,里面針對RAND()的提示大概意思就是胎围,在ORDER BY從句里面不能使用RAND()函數(shù)吁系,因為這樣會導(dǎo)致數(shù)據(jù)列被多次掃描,導(dǎo)致效率相當相當?shù)牡桶谆辏⌒什恍衅耍屑墒褂茫?/p>

  2. SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users))+(SELECT MIN(userId) FROM users)) AS userId) AS t2 WHERE t1.userId >= t2.userId ORDER BY t1.userId LIMIT 1
    執(zhí)行該sql語句,用時0.031s福荸,效率沒說的蕴坪,相當?shù)慕o力!心里那個爽啊敬锐,緊接著背传,我把”LIMIT 1“改為了”LIMIT 100“ 隨機取一百條記錄,用時0.048台夺,給力吧径玖。可是就在此時問題出現(xiàn)了颤介,發(fā)現(xiàn)結(jié)果好像不是隨機的梳星?為了驗證結(jié)果赞赖,又執(zhí)行了N次,真不是隨機的丰泊, 問題出現(xiàn)在”O(jiān)RDER BY t1.userId“這里薯定,按userId排序了。隨機取一條記錄還是不錯的選擇瞳购,多條就不行了啊亏推!

  3. SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1
    執(zhí)行該sql語句学赛,用時0.039s,效率太給力了吞杭!接著我就把”LIMIT 1“改為了”LIMIT 10000“盏浇,用時0.063s。經(jīng)過多次驗證芽狗,哥對燈發(fā)誓绢掰,結(jié)果肯定是隨機的!
    結(jié)論:隨機取一條或多條記錄童擎,方法都不錯滴劲!

  4. 通過sql獲得最大值和最小值,然后通過php的rand生成一個隨機數(shù)randnum顾复,再通過SELECT * FROM users WHERE userId >= randnum LIMIT 1班挖,效率應(yīng)該差不多,

    結(jié)論:方法1效率不行芯砸,切忌使用萧芙;隨機獲得一條記錄,方法2是相當不錯的選擇假丧,采用JOIN的語法比直接在WHERE中使用函數(shù)效率還是要高一些的双揪,不過方法3也不錯;隨機獲得多條記錄包帚,方法3沒說的渔期!


方法札記
1 將數(shù)據(jù)庫中的記錄按照隨機數(shù)進行排序,利用LIMIT取前面n條記錄即可婴噩。

SELECT * FROM news_tagging_app_tag as t ORDER BY rand() LIMIT 50;


該文章于2017年8月30日于CSDN上首次發(fā)表擎场,2017年12月24日搬家至此!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末几莽,一起剝皮案震驚了整個濱河市迅办,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌章蚣,老刑警劉巖站欺,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨夹,死亡現(xiàn)場離奇詭異,居然都是意外死亡矾策,警方通過查閱死者的電腦和手機磷账,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贾虽,“玉大人逃糟,你說我怎么就攤上這事∨罨恚” “怎么了绰咽?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長地粪。 經(jīng)常有香客問我取募,道長,這世上最難降的妖魔是什么蟆技? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任玩敏,我火速辦了婚禮,結(jié)果婚禮上质礼,老公的妹妹穿的比我還像新娘旺聚。我一直安慰自己,他們只是感情好几苍,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布翻屈。 她就那樣靜靜地躺著,像睡著了一般妻坝。 火紅的嫁衣襯著肌膚如雪伸眶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天刽宪,我揣著相機與錄音厘贼,去河邊找鬼。 笑死圣拄,一個胖子當著我的面吹牛嘴秸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播庇谆,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼岳掐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了饭耳?” 一聲冷哼從身側(cè)響起串述,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寞肖,沒想到半個月后纲酗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衰腌,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年觅赊,在試婚紗的時候發(fā)現(xiàn)自己被綠了右蕊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吮螺,死狀恐怖饶囚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情规脸,我是刑警寧澤坯约,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站莫鸭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏横殴。R本人自食惡果不足惜被因,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望衫仑。 院中可真熱鬧梨与,春花似錦、人聲如沸文狱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瞄崇。三九已至呻粹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苏研,已是汗流浹背等浊。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留摹蘑,地道東北人筹燕。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像衅鹿,于是被迫代替她去往敵國和親撒踪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • MySQL很多時候需要獲取隨機數(shù)據(jù)大渤,舉個例子制妄,要從tablename表中隨機提取一條記錄,大家一般的寫法就是: S...
    J_xu閱讀 3,046評論 0 0
  • 50個常用的sql語句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,235評論 0 7
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫兼犯。SQL是...
    西貝巴巴閱讀 1,822評論 0 10
  • 今天這樣的排頭圖片是有原因的忍捡,上班的路上有了一個特別的想法集漾,付愛寶天使和付愛寶精靈是兩個特別乖巧的孩子,付愛寶的孩...
    ef19cd0c10f7閱讀 185評論 0 0
  • 要優(yōu)先使用基本類型而不是裝箱基本類型砸脊,要當心無意識的自動裝箱具篇。 檢查參數(shù)的有效性 不要過去追求提供便利的方法,除非...
    cammsia閱讀 164評論 0 0