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) 来随机获取数据