研究一些隨機的因素,主要是講究效率問題。
語句一:
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...