• 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;

    总结:

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

  • 相关阅读:
    【springcloud alibaba】配置中心之nacos
    【springcloud alibaba】注册中心之nacos
    LeetCode计数质数Swift
    LeetCode移除链表元素Swift
    LeetCode删除重复的电子邮箱SQL
    LeetCode汉明距离Swift
    LeetCode两整数之和Swift
    LeetCode从不订购的客户SQL
    LeetCode超过经理收入的员工SQL
    LeetCode组合两个表SQL
  • 原文地址:https://www.cnblogs.com/dayspring/p/13937655.html
Copyright © 2020-2023  润新知