位置: 编程技术 - 正文

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存储过程)

  • 流量结转是什么意思
  • 小型微利企业所得税怎么计算
  • 什么情况用已交税金
  • 哪些情况可免征增值税
  • 税务基本任务和稽查范围?
  • 应纳税所得额是利润总额吗
  • 怎么找回丢失的手机号
  • 理财收益交增值税
  • 无名称发票可以抵扣吗
  • 普通增值税发票可以抵税吗?
  • 企业安全防护措施有哪些
  • 关停企业的生产线能否停止计提折旧?
  • 公司搞活动的话术
  • 利润的计算方法数学
  • 预交电费有发票吗
  • 为什么查询发票显示查无此票
  • 建筑分包项目有哪些内容
  • 员工个人学历教育费用不能在企业所得税前列支
  • 一般企业的会计原始凭证有哪些类型
  • 事业单位固定资产管理办法
  • 企业担保形成损失的原因
  • 抵税的税额怎么计算
  • 个税房租和房贷抵扣一样吗
  • 发票盖章盖成了财务章有影响吗
  • 民间非营利组织会计科目
  • 电脑重启后分辨率没有1920x1080
  • 税优识别码是纳税人识别号吗
  • 长期待摊费用科目还用吗
  • 银行存款和账面的关系
  • 制作flash动画步骤
  • 外销收入含税吗
  • 税务局要求小规模纳税人开专票
  • idea添加web项目
  • php做登录界面连接数据库
  • php实现文件的下载
  • 基于Java+Springboot+vue在线版权登记管理系统设计实现
  • gpt指标
  • 模型论文是什么类型
  • 中国版ChatGPT即将来袭-国内版ChatGPT入口
  • 连锁店会计的工作内容
  • 公司借调员工
  • 超过五年的未弥补亏损如何处理?
  • 资产处置收益的账务处理
  • 帝国cms灵动标签调用标题图片
  • mysql慢查询日志查看
  • MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
  • 将织梦dedecms转换到wordpress
  • 错账调整分录
  • 企业开办前需要预测现金流量计划吗
  • 发行的企业债券属于所有者权益吗
  • 决算报表属于会计账簿吗
  • 分派现金股利处理
  • 税控服务费全额抵扣申报怎么填
  • 酒店购买天然气开票的摘要写什么
  • 企业弥补以前年度亏损要怎么填表
  • 账面价值低于可抵税收
  • 应付账款暂估会计处理
  • 工业企业成本占比多少合适
  • 主营业务收入是什么意思
  • Mysql 5.7.19 winx64 ZIP Archive 安装及使用过程问题小结
  • win8的文件夹选项在哪里
  • WIN10如何设置字体大小
  • svhost.exe - svhost是什么进程 有什么作用
  • win8怎么把开始调出来
  • win7系统无法查看共享电脑
  • win7不能运行应用程序的方法
  • notify.exe - notify是什么进程 有什么用
  • unix怎么操作
  • opengl怎么学
  • javascript的字符串操作
  • python开发软件教程
  • js拖拽生成页面
  • 安卓版本apk
  • 风力发电,光伏发电还有哪些
  • 地税税号查询系统
  • 以划拨方式取得的土地使用权
  • 高级人民法院党组书记级别
  • 如何理解财税一体化
  • 四川税收总额
  • 纳税服务存在的不足之处
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设