当前位置:主页 > mysql教程 > mysql随机查询若干条数据的方法

mysql随机查询数据的代码分析

发布:2020-06-19 10:38:54 160


给大家整理了相关的编程文章,网友红芊芊根据主题投稿了本篇教程内容,涉及到mysql、随机查询、mysql随机查询若干条数据的方法相关内容,已被960网友关注,涉猎到的知识点内容可以在下方电子书获得。

mysql随机查询若干条数据的方法

在mysql中查询5条不重复的数据,使用以下:

 

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

就可以了。但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上

搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。

 

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 ASC LIMIT 5;

但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。

上面的语句采用的是JOIN,mysql的论坛上有人使用

 

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

我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。

于是我把语句改写了一下。

 

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

这下,效率又提高了,查询时间只有0.01秒

最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
完整查询语句是:

 

 

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

 

最后对这两个语句进行分别查询10次,
前者花费时间 0.147433 秒
后者花费时间 0.015130 秒
看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。


参考资料

相关文章

  • 如何开启MySQL慢查询

    发布:2020-02-14

    开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。下面这篇文章主要介绍了关于MySQL开启慢查询的相关资料,需要的


  • 解析mysql基础架构教程之查询语句执行的流程

    发布:2020-01-29

    这篇文章主要给大家介绍了关于mysql基础架构教程之查询语句执行流程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一


  • mysql查询重复数据中SQL优化方法

    发布:2019-08-09

    这篇文章主要介绍了mysql 查询重复的数据的SQL优化方案,非常不错的方案推荐给大家。


  • 分享mysql简单实现查询结果添加序列号的代码

    发布:2020-02-16

    这篇文章主要介绍了mysql简单实现查询结果添加序列号的方法,结合实例形式演示了2种查询结果添加序列号的技巧,具有一定参考借鉴价值,需要的朋友可以参考下


  • 实现MySQL递归查询树状表的子节点、父节点具体方法

    发布:2020-01-14

    本程序写了两个sql存储过程,子节点查询算是照搬了,父节点查询是逆思维弄的


  • MySql跨表查询的方法汇总

    发布:2020-03-02

    本篇文章是对MySql实现跨表查询的方法进行了详细的分析介绍,需要的朋友参考下


  • mysql查询当天、本周,本月、上一个月数据

    发布:2019-06-21

    这篇文章主要介绍了mysql 查询当天、本周,本月,上一个月的数据的sql代码,在文中还给大家提到了mysql如何查询当天信息,具体内容详情大家参考下本文


  • 示例讲解php+mysql查询实现无限下级分类树输出

    发布:2020-02-14

    这篇文章主要介绍了php+mysql查询实现无限下级分类树输出,结合实例形式分析了php+MySQL查询实现的树状分类输出功能,涉及php数据库查询与数组遍历等相关操作技巧,需要的朋友可以参考下


  • MySQL基本查询语句总结

    发布:2020-06-19

    这篇文章主要介绍了MySQL中的基本查询语句学习笔记,包括使用limit限制查询结果条数和合并查询结果的方法,需要的朋友可以参考下


  • 深入理解MySql数据表之间的连接、查询

    发布:2020-03-06

    这篇文章主要介绍了MySql数据表之间的连接、查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


网友讨论