從資料庫隨機取出一條資料的業務需求

2021-09-26 08:04:24 字數 742 閱讀 6885

1.首先來個比較基礎的

select user_id,nickname from aw_users  order by rand() limit 1

不過嘛, 效率比較低,不建議使用。我也不太懂,網上說rand()是把表資料首先整個取出來,limit1條,一下全部取出來,但是只取一條,浪費資源嘛

2.網上搜尋了更好的辦法

就是使用max(id)函式,取出隨機變化範圍的最大值(select max(id) from table),rand() 隨機取乙個數,注意,這裡沒有資料資料內資料的處理,時間還是快的(鄙人猜想)

1). select floor( max(id) * rand()) from `table` 

2).select floor(rand() * (select max(id) from `table`))

1)的效率沒有2)的高,區別在於1)在selet 中做了計算處理,從資料庫取出大量資料再來處理的。2)是取出一條資料,再做隨機處理,所以呢, 從資料庫區的資料越少,就越快,max()的功勞

可用sql如下:

select t1.id,t1.address from `xj_user_login_log` as t1 join (select round(rand() * (select max(id) from `xj_user_login_log`)) as id) as t2

where t1.id >= t2.id

order by t1.id asc limit 1;

LINQ分組取出第一條資料

person1 id 1,name test1 person2 id 1,name test1 person3 id 2,name test2 以上list如果直接使用distinct方法進行過濾,仍然返回3條資料,而需要的結果是2條資料。下面給出解這個問題的方法 方法1 distinct 方法中使...

從mysql資料表中隨機取出一條記錄

核心查詢資料表 select from 表名 order byrand limit 1 此處的1就是取出資料的條數 但這樣取資料網上有人說效率非常差的,那麼要如何改進呢 搜尋google,網上基本上都是查詢max id rand 來隨機獲取資料。select from table as t1 joi...

MySql從表結果集中隨機取一條資料

該功能的實現基於 mysql 查詢結果中自動加序號列 select from select rowno rowno 1 as rowno,pwd from pur admininfo,select rowno 0 b tmp where rowno select round rand 1000000...