mysql隨機抽取一定數(shù)量的記錄實例講解
以前碰見這種使用場景都是直接order by rand()來處理的,但是效率實在是不敢恭維,所以最近又碰見這種場景,在網(wǎng)上找尋下比較好的解決辦法.
1.order by rand()
寫法:
SELECT id FROM `table` ORDER BY rand()
這種寫法的缺點是rand函數(shù)在order by中被執(zhí)行多次,影響效率。
2.max(id) * rand() 使用join
寫法:
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;
網(wǎng)上的大佬們都推薦第二種寫法,特此記錄下,感覺最大id和最小id可以放在程序里來計算。
這里有個問題是如果取多條 那么一定是連續(xù)的,所以如果是不想取連續(xù)數(shù)據(jù),得循環(huán),不過此語句效率極高,所以循環(huán)查詢是可以做的。
以上就是全部相關(guān)知識點內(nèi)容,有需要的朋友們可以學(xué)習(xí)下,感謝大家對腳本之家的支持。
相關(guān)文章
MySQL中rank() over、dense_rank() over、row_number()&n
本文主要介紹了MySQL中rank() over、dense_rank() over、row_number() over用法介紹,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03Mysql關(guān)于數(shù)據(jù)庫是否應(yīng)該使用外鍵約束詳解說明
MySQL 外鍵約束(FOREIGN KEY)是表的一個特殊字段,經(jīng)常與主鍵約束一起使用。對于兩個具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表,外鍵所在的表就是從表。外鍵用來建立主表與從表的關(guān)聯(lián)關(guān)系,為兩個表的數(shù)據(jù)建立連接,約束兩個表中數(shù)據(jù)的一致性和完整性2021-10-10