最近在做一个在线考试系统,遇到需要随机选择20道选择题的需求.

<Excerpt in index | 首页摘要>

<The rest of contents | 余下全文>

使用ORDER BY RAND()选择随机记录

MySQL没有内置语句来从数据库表中选择随机记录。为了实现这个目的,可使用RAND函数。 以下查询是从数据库表中选择N个随机记录:

1
2
3
4
5
6
SELECT 
*
FROM
tbl
ORDER BY RAND()
LIMIT N;
  • RAND()函数为表中的每一行生成一个随机值。
  • ORDER BY子句按照RAND()函数生成的随机数对表中的所有行进行排序。

这种技术非常适合小表。如果在大的表上执行速度是非常缓慢的,因为MySQL必须排序整个表,以挑选随机的行数据。查询的速度还取决于表中的行数。表具有的行越多,MySQL都要为每行生成随机数,所以所需的时间就越多。