工作中會遇到從資料庫中隨機獲取一條或多條記錄的場景,下面介紹幾種隨機獲取的方法供參考。
首先建立個users表演示
create table `users` (
`id` int(11) not null auto_increment,
`username` varchar(255) default null,
`age` int(11) default null,
primary key (`id`)
) engine=innodb default charset=utf8;
表中存放30萬記錄。
select * from users order by rand() limit 1;
此種方法在資料量小的情況下可以使用,但在生產環境不建議使用。
mysql手冊裡面針對rand()的提示大概意思就是,在 order by從句裡面不能使用rand()函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率不行,切忌使用。
select * from users as t1 join (select round(rand()*(select max(id)
from users)) as id) as t2 where t1.id>=t2.id order by t1.id limit 1;
此sql隨機獲取一條的時間是0.014s,limit 100時耗時 0.020s,效能上沒差多少。
獲取多條的話有時會達不到要求(獲取的記錄數可能達不到多條)
select * from users as t1 where t1.id>=(rand()*(select max(id) from users)) limit 1;
隨機去一條的耗時:0.015,limit 100時耗時 0.026s。
隨機獲取一條記錄推薦使用 第2種方法,在30萬條記錄時也只需0.014s。
MySQL資料庫中隨機獲取一條或多條記錄
在開發過程中遇到了乙個問題,使用mysql資料庫,用sql語句在表中隨機獲取一條或多條資料,看似簡單,但是往深層研究的話還是很有深度的,查了好多資料,接下來給大家分享一下 select from table name order by rand limit 1 mysql中的rand 函式呼叫可以在...
mysql隨機獲取一條或者多條資料
研究一些隨機的因素,主要是講究效率問題。語句一 select from users order by rand limit 1 mysql手冊裡面針對rand 的提示大概意思就是,在 order by從句裡面不能使用rand 函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率不行,切忌...
mysql隨機獲取一條或者多條資料
轉來備份 研究一些隨機的因素,主要是講究效率問題。語句一 select from users order by rand limit 1 mysql手冊裡面針對rand 的提示大概意思就是,在 order by從句裡面不能使用rand 函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率...