下边给出四种方法,由慢到快,方法四最效率。

测试背景:
数据总量41万+

mysql 随机表名查询 mysql随机数据_4s

方法一:

这种方法可以一次查询5条,执行速度455.596s

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

mysql 随机表名查询 mysql随机数据_测试背景_02

 

方法二:

这种方法如果limit5的话将会是连续的五条,所以这里是limit1,为了实现目的可以执行5次,执行速度214.54s

SELECT *
 
FROM `table`
 
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
 
ORDER BY id LIMIT 1;

mysql 随机表名查询 mysql随机数据_测试背景_03

方法三:

方法二改良版,执行速度0.151s,有没有发现速度飞快,是因为索引问题,虽然两条主要sql最终都是查询了1条记录,但是方法二中的子查询部分索引失效了。

SELECT * FROM `table`
 
WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
 
ORDER BY id LIMIT 1;

mysql 随机表名查询 mysql随机数据_子查询_04

 

方法四:

可以看到比方法三要快,这么看join要比子查询效率高

SELECT *
 
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
 
WHERE t1.id >= t2.id
 
ORDER BY t1.id LIMIT 1;

mysql 随机表名查询 mysql随机数据_mysql 查询18位随机书_05

总结:

从这一个问题就能考察出应聘人员数据库方面的很多知识,所以有实力的面试官所提出的问题还是认真考虑一下,如果能考明白对自己的提升还是有的,最次也能巩固一下自己所学的知识。