mysql 查询随机数据

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

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

方法一:

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

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

方法二:

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

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

方法三:

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

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

方法四:

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

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

总结:

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

原文地址:https://www.cnblogs.com/dayspring/p/13937655.html