1. 程式人生 > 其它 >mysql一次性獲取幾十萬資料_mysql隨機獲取一條或者多條資料

mysql一次性獲取幾十萬資料_mysql隨機獲取一條或者多條資料

技術標籤:mysql一次性獲取幾十萬資料mysql隨機獲取十條oracle多條資料合併成一條oracle獲取時間最大的一條資料

mysql隨機獲取一條或者多條資料 - osc_rm0mt9zx的個人空間 - OSCHINA - 中文開源技術交流社群​my.oschina.net fdc52f54d7ce7c14ac5ebb7874f6387f.png

網上的方案都不是很靠譜

select * from users order by rand() LIMIT 1
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
SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1

首先我們分析一下業務訴求

是真的需要完全隨機還是需要每次都拿到不同的記錄,如果是完全隨機就有可能出現重複的記錄,同一時間執行SQL的使用者拿到的資料有可能相同

如果是為了保證在併發情況和長時間上不頻繁出現重複,則應考慮的方案為:

一、把已有的記錄加入佇列,每次新請求從佇列獲取一條,佇列為空時重新追加

好處是記錄數量較少、請求量較少時保證了一段時間內不重複,但可能出現穩定的重複規律