mysql隨機獲取一條或者多條資料

2021-07-31 21:34:31 字數 1185 閱讀 6114

研究一些隨機的因素,主要是講究效率問題。

語句一:

select * from users order by rand() limit 1

mysql手冊裡面針對rand()的提示大概意思就是,在 order by從句裡面不能使用rand()函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率不行,切忌使用。

---------分隔線------------------------------------

語句二:

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

執 行該sql語句,用時0.031s,效率非常好。當把」limit 1「改為了」limit 100「 隨機取一百條記錄,用時0.048s。可是就在此時問題出現了,發現結果好像不是隨機的。為了驗證結果,又執行了n次,的確不是隨機的。問題出現 在」order by t1.userid「這裡,按userid排序了。隨機取一條記錄還是不錯的選擇,多條就不行了啊。

---------分隔線------------------------------------

語句三:

select * from users where userid >= ((select max(userid) from users)-(select min(userid) from users)) * rand() + (select min(userid) from users)  limit 1

執行該sql語句,用時0.039s,效率也是非常好。接著把」limit 1「改為了」limit 10000「,用時0.063s。經過多次驗證,得出的結果都是隨機的。

---------分隔線------------------------------------

結論:語句一效率不行,切忌使用。隨機獲得一條記錄,語句二是相當不錯的選擇,採用join的語法比直接在where中使用函式效率還是要高一些的。語句三也不錯,隨機獲得多條記錄的首選。

mysql隨機獲取一條或者多條資料

轉來備份 研究一些隨機的因素,主要是講究效率問題。語句一 select from users order by rand limit 1 mysql手冊裡面針對rand 的提示大概意思就是,在 order by從句裡面不能使用rand 函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率...

mysql隨機獲取一條或者多條資料

轉來備份 研究一些隨機的因素,主要是講究效率問題。語句一 select from users order by rand limit 1mysql手冊裡面針對rand 的提示大概意思就是,在 order by從句裡面不能使用rand 函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率不...

MySQL資料庫中隨機獲取一條或多條記錄

工作中會遇到從資料庫中隨機獲取一條或多條記錄的場景,下面介紹幾種隨機獲取的方法供參考。首先建立個users表演示 create table users id int 11 not null auto increment,username varchar 255 default null,age in...