位置: 编程技术 - 正文

MYSQL 随机 抽取实现方法及效率分析(mysql 随机抽样)

编辑:rootadmin
但是,后来我查了一下MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。但是在MYSQL 3.版本中,仍然可以通过ORDER BY RAND()来实现随机。 但是真正测试一下才发现这样效率非常低。一个万余条的库,查询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()来随机获取数据。 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次。即便如此也值得,因为万条的表,查询只需要0.秒不到。 下面的语句采用的是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.秒 最后,再把语句完善一下,加上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; 最后在php中对这两个语句进行分别查询次, 前者花费时间 0. 秒 后者花费时间 0. 秒 看来采用JOIN的语法比直接在WHERE中使用函数效率还要高很多。

推荐整理分享MYSQL 随机 抽取实现方法及效率分析(mysql 随机抽样),希望有所帮助,仅作参考,欢迎阅读内容。

MYSQL 随机 抽取实现方法及效率分析(mysql 随机抽样)

文章相关热门搜索词:mysql随机抽取数据,mysql 随机抽样,mysql随机抽取10条数据数据超过五十万,mysql随机抽取10%数据,mysql随机抽取某个范围内的日期,将其作为开心日,mysql随机抽取数据用什么命令,mysql随机抽取10%数据,mysql随机抽取数据50条,内容如对您有帮助,希望把文章链接给更多的朋友!

mysql 存储过程的问题 一开始用phpMyAdmin来执行,后来出现一堆错误,后来去掉了begin,end之后可以正常执行,但要执行存储过程,在phpMyAdmn中不行,而在mysql命令行文本框中就

Mysql my.ini 配置文件详解 Mysqlmy.ini配置文件详解#BEGINCONFIGINFO#DESCR:4GBRAM,只使用InnoDB,ACID,少量的连接,队列负载大#TYPE:SYSTEM#ENDCONFIGINFO##此mysql配置文件例子针对4G内存#主要使用INNODB#

java实现插入mysql二进制文件,blob类型,遇到问题及解决办法 首先是数据库建立要准备的:我们要把放置二进制字段设置为Blob类型,根据文件的大小选择合适的Blob类型,一下是各个Blob类型所能容纳二进制文件的

标签: mysql 随机抽样

本文链接地址:https://www.jiuchutong.com/biancheng/320195.html 转载请保留说明!

上一篇:MySQL 配置文件my.cnf 例子最详细翻译(mysql配置文件my.ini如何配置)

下一篇:mysql 存储过程的问题(mysql8.0存储过程)

  • 海关进口啥意思
  • 利息调整的计算公式
  • 关税的税收主体是外国的进出口商
  • 支付转让费待摊怎么做账
  • 员工预支薪金怎么记账
  • 法人转入公司的资金怎么做账
  • 税收主要分类方法
  • 抵债资产计提折旧怎么算
  • 单品毛利计算公式怎么算
  • 企业取得政府财政资金,收入时间如何确认?
  • 买机票返钱
  • 建筑业购买车辆怎么入账
  • 合作开发项目收益怎么算
  • 工资扣除水电费扣个税
  • 股票收入要交所得税吗
  • 资产减值损失列示在利润表哪里
  • 开手续费发票开多了怎么做账
  • 收到雇主责任险发票计入什么科目
  • 出差餐费报销怎么报销
  • 其他应付款注销时怎么冲平
  • 关于购买专业书籍的请示
  • 企业控股情况是指
  • 电脑中了勒索病毒要报警吗
  • 鸿蒙系统如何截屏
  • 银行余额调节表例题和答案
  • 职工福利费扣除率是多少
  • win10自动关机方法
  • 经营性流动负债计算公式
  • PHP:pg_result_error_field()的用法_PostgreSQL函数
  • php实现邮件发送
  • composer安装不知道这样的主机
  • thinkphp登录
  • 什么是市盈率和市净率,谈谈你对两个指标的理解
  • 公司支付工伤赔偿,是先签字还是先打钱
  • 小规模纳税人工程税率是多少
  • opengl加阴影
  • 用vue-cli搭建项目
  • 学网新用什么电脑
  • 织梦如何使用
  • 特殊工种人身安全责任书
  • 合同补充协议印花税怎么交
  • 长期待摊费用核销
  • 无形资产摊销一经确认不得转回
  • 公司帮员工买的意外险钱是打到公司还是员工账号
  • 企业汇总纳税的原则
  • 合作社收到政府补贴会计分录
  • 发票一直没验旧会有什么影响
  • 房租收不回来会计分录
  • 营改增后建筑业分公司账务
  • 残疾人就业保障金征收使用管理办法
  • 本年收益属于什么科目
  • 营业执照可以注册几个抖音号
  • 结账时应当结出每个账户的期末余额对吗
  • centos邮件服务器
  • 如何下载苹果图书
  • win7怎样安装摄像头驱动
  • win7系统快捷键关机
  • window10总更新是怎么回事
  • debian系列
  • 因为你的策略组阻止
  • mac如何整理桌面图标
  • 双系统没有选择
  • 手机耳机插在电脑上能说话吗
  • awk 筛选有特定字符
  • [置顶] 此外,车牌号:458143(懂得都懂[吃瓜])
  • 用批处理删除盘符
  • jquery全选和全不选效果
  • xcopy复制并改名
  • jni静态注册和动态注册
  • shell 命令执行顺序
  • Intermediate Unity 3D for iOS: Part 3/3
  • Jquery中巧用Ajax的beforeSend方法
  • jquery中keyup
  • 深入理解中国式现代化
  • jquery dom对象
  • jqueryw3c
  • python图片验证码输入错误不能点登陆
  • 什么车属于应征消费税的汽车
  • 西安养老保险申报
  • 设计费需要交税吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设