亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從mysql數據庫中隨機獲取任意條數據?

如何從mysql數據庫中隨機獲取任意條數據?

鳳凰求蠱 2018-10-29 09:09:01
我在做一個隨機出題的小應用,需要在mysql數據庫的題庫表里隨機選出任意條數據作為題目,每條數據為一道題目,從網上查了很多資料,基本上有兩種,一種是使用 ORDER BY rand()語句,這個語句可以實現取任意條數據,但是官網提示數據量大時內存消耗會很大,查詢會很慢,另一種是SELECT table. *FROM(SELECT ROUND(RAND() * (SELECT MAX(id)FROMtable)) random_num,@num:=@num + 1FROM(SELECT @num:=0) AS a, tableLIMIT N) AS b,table AS tWHEREb.random_num = t.id;這種語句有一個問題,就是我想選出20條數據,有時候會返回19條,就是會出現返回數據不夠的情況,請問各位大神有什么好辦法沒?最好返回的數據可以不按自增長id排序,題目順序需要打亂。
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

如果在where 子句中使用參數,會導致全表掃描。
因為SQL只有在運行時才會解析局部變量,但優化程序不能將訪問計劃的選擇推 遲到運行時;
它必須在編譯時進行選擇。然而,如果在編譯時建立訪問計劃,變量的值還是未知的,因而無法作為索引選擇的輸入項。

你的這個sql多重嵌套使用參數 你算算多少次全表掃描了。個人覺得這個需求完全可以由程序來做,只需要寫簡單的sql,動態生成sql。


查看完整回答
反對 回復 2018-11-03
  • 2 回答
  • 0 關注
  • 1567 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號