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

2021-10-01 22:32:58 字數 994 閱讀 7430

工作中會遇到從資料庫中隨機獲取一條或多條記錄的場景,下面介紹幾種隨機獲取的方法供參考。

首先建立個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 函式,因為這樣會導致資料列被多次掃瞄,導致效率相當相當的低,效率...