mysql隨機查詢n條資料

2021-10-06 03:16:09 字數 733 閱讀 5689

遇到乙個業務需求是隨機查詢n條資料,一開始使用這種寫法

select * from table order by rand() limit n
後來發現這種寫法的查詢效率極低,並且官方也不推薦使用。

又經過查詢發現網上很多教程更靠譜的寫法如下

select *

from `table` as t1 join (select round(rand() * ((select max(id) from `table`)-(select min(id) from `table`))+(select min(id) from `table`)) as id) as t2

where t1.id >= t2.id

order by t1.id limit 1;

查詢時間只需要零點零幾秒。

但是貌似只適用於自增主鍵,而我的主鍵是uuid,所以每次查出來都是相同的資料,不能使用。

後來發現下面這種方法非常適用,並且效率很高

select * from table where id in 

(select id from (select id from table order by rand() limit 3) t)

這樣看起來相當於先隨機查n條id,然後拿著id去查。效率還是蠻高的。

不過貌似在資料庫處理這種查詢不是很好,等以後發現更好的辦法再來更新一波。

隨機取mysql的N條資料

先來個看似複雜的 需要查user表裡,code為100,的隨機不重複的2兩個name值 select from select id,name,code from user where code 100 as t1 join select round rand select max id from u...

mysql隨機查詢若干條資料

在 mysql 中查詢5 條不重複的資料,使用以下 select from table order byrand limit 5就可以了。但是真正測試一下才發現這樣效率非常低。乙個 15萬餘條的庫,查詢 5條資料,居然要 8秒以上 搜尋google 網上基本上都是查詢 max id rand 來隨機...

mysql隨機查詢若干條資料

在mysql中查詢5條不重複的資料,使用以下 select from table order by rand limit 5 就可以了。但是真正測試一下才發現這樣效率非常低。乙個15萬餘條的庫,查詢5條資料,居然要8秒以上 搜尋google,網上基本上都是查詢max id rand 來隨機獲取資料。...