MySQL 如何查询随机数据
来到这个页面,你很可能有这种需求:
如何从一张 MySQL 数据库的表中随机获取一些数据?
这里我们把这个问题分为两类:
- 如何从一张表中随机获取一行数据?
- 如何从一张表中随机获取多行数据?
我们会针对两种场景分别讨论,并给出若干种方案。
随机获取一行数据
方法1:基于 ORDER BY RAND()
示例:
1 | SELECT * |
缺点:
- 当表中数据量很大的时候,使用
ORDER BY RAND()
性能可能会比较差,有可能需要几秒甚至几分钟才能出结果。
方法2:基于 RAND() 和 MAX() 取随机的连续若干行数据
适用场景:
- 主键或者唯一索引是数字类型
- 主键或者唯一索引是连续的、均匀分布的
方法3
如果你用的表的主键或者唯一索引并不是数字类型的,比如是 UUID,那么应该怎么办呢?
方法3:SQL 和程序代码结合
首先,使用 MAX(emp_no)
查询出来最大的 ID。
1 | SELECT MAX(emp_no) |
方法4:两步法,先查询最大值,然后基于 OFFSET
随机获取多行数据
21312312321
参考资料
- php - MySQL ORDER BY rand(), name ASC - Stack Overflow
- ORDER BY RAND() - ~jk
- SELECT a random row with SQL【这篇文章主要是关于取单行数据,而且是把网上不同数据库的方案放到一篇文章中了,针对性能问题,提到了一个使用 OFFSET 解决 MySQL 和 PostgreSQL 的手段,还提到别的数据库中有类似机制,但是没有详细介绍】