• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL随机查询记录的效率测试分析

MySQL随机查询记录的效率测试分析

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql查询效率,mysql提高查询效率,mysql in 查询效率,mysql limit 效率,mysql 效率等相关知识,希望本文的分享对您有所帮助
以下就是文章的主要内容。
  1.SELECT * FROM `table` ORDER BY RAND() LIMIT 5
  就可以了。
  但是真正测试一下才发现这样效率非常低。一个15万余条的库,查询5条数据,居然要8秒以上
  查看官方手册,也说rand()放在ORDER BY 子句中会被执行多次,自然效率及很低。
  You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
  搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据。
  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 ASC LIMIT 5;
  但是这样会产生连续的5条记录。解决办法只能是每次查询一条,查询5次。即便如此也值得,因为15万条的表,查询只需要0.01秒不到。
  上面的语句采用的是JOIN,MySQL的论坛上有人MySQL使用
  1.SELECT *
  2.FROM `table`
  3.WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
  4.ORDER BY id LIMIT 1;
  我测试了一下,需要0.5秒,速度也不错,但是跟上面的语句还是有很大差距。总觉有什么地方不正常。
  于是我把语句改写了一下。
  1.SELECT * FROM `table`
  2.WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM `table`)))
  3.ORDER BY id LIMIT 1;
  这下,效率又提高了,查询时间只有0.01秒
  最后,再把语句完善一下,加上MIN(id)的判断。我在最开始测试的时候,就是因为没有加上MIN(id)的判断,结果有一半的时间总是查询到表中的前面几行。
  完整查询语句是:
  1.SELECT * FROM `table`
  2.WHERE id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`)) + (SELECT MIN(id) FROM `table`)))
  3.ORDER BY id LIMIT 1;
  4.SELECT *
  5.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
  6.WHERE t1.id >= t2.id
  7.ORDER BY t1.id LIMIT 1;
  最后在php中对这两个语句进行分别查询10次,
  前者花费时间 0.147433 秒
  后者花费时间 0.015130 秒
  看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。以上的相关内容就是对MySQL使用rand随机查询记录效率测试的介绍,望你能有所收获。 </div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL随机查询记录的效率测试分析
  • 提高MySQL中数据装载效率
  • MySQL优化之如何查找SQL效率低的原因
  • mysql分页原理和高效率的mysql分页查询语句

相关文章

  • 2017-05-11如何使用索引提高查询速度
  • 2017-05-11Mysql auto_increment 重新计数(让id从1开始)
  • 2018-12-05apache中访问不了伪静态页面的解决方法
  • 2017-05-11mysql 无限级分类实现思路
  • 2018-12-05把数据批量插入具有Identity列的表的方法
  • 2018-12-05详解SQL中distinct的使用方法
  • 2017-05-11MySql游标的使用实例
  • 2017-05-11MySQL实现差集(Minus)和交集(Intersect)测试报告
  • 2017-05-11基于mysql事务、视图、存储过程、触发器的应用分析
  • 2018-12-05windows下安装mysql-5.7.21

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQ中基本语法与语句的介绍
    • SQL2000 全文索引完全图解
    • SQLServer分布式事务问题
    • mysql database manual(mysql数据库手册)
    • MySQL sql基础语句大集合
    • sql convert函数使用小结
    • 关于数据引擎的详细介绍
    • oracle 服务启动,关闭脚本(windows系统下)
    • MySQL 服务器参数说明及查看 设置方法
    • Mysql数据库导出和导入sql数据库文件命令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有