mysql中使用order by rand(),可隨機組行或值。
使用分頁還好,不影響速度,但是我在項目中使用到了MyBatis-Plus,直接查詢全部數據生成一個普通的List,IPage自動替我們分頁,但是這樣效率非常低,SQL如下:
SELECT * FROM product ORDER BY RAND()
嘗試在SQL后面加分頁,但是IPage再分頁時會報錯,於是采用了下面這種寫法:
SELECT p.* FROM product p INNER JOIN ( SELECT round( rand() * (SELECT max(id) FROM product) ) AS ids ) t ON p.id > t.ids
使用JOIN,查詢 rand() * max(id) 來隨機獲取數據