位置: 编程技术 - 正文

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

  • 新建厂房装修费是否计入固定资产
  • 待转销项税额是几级科目
  • 财务管理考试时间多长
  • 上月开票这月退票要红冲吗?
  • 更正申报后可以作废吗
  • 什么叫销售劳务
  • 没申报可以开票嘛
  • 家属机票怎么办理
  • 收到短期贷款会计分录
  • 劳务公司外地劳务是否需要预缴税款及会计处理
  • 税前扣除的职工福利费标准
  • 生产企业电梯维修方案
  • 代国外佣金代扣税金账务怎么处理?
  • 法院拍卖房法院有什么义务和责任
  • 固定资产预计净残值最后怎么处理
  • 不动产抵扣涉及净值,这里的净值是否扣除减值准备,是否扣除不动产改变用途当月的折旧额?
  • 销售货物运费的增值税率
  • 前期物业管理公司
  • 利润表的本期数即本月实际发生数
  • 企业零星支出是否需要发票
  • 增值税减免税如何处理
  • 原始凭证填写错误,可撕毁重新编制一张
  • 软件企业即征即退例题
  • 自己生产的水泥用于建造厂房
  • 新手会计怎么入门做账
  • macos的复制粘贴快捷键
  • 腾讯手游助手使命召唤怎么滑铲
  • 应付工程款账务处理
  • 国库年终总结
  • linux系统中怎么创建目录
  • igfxext.exe
  • 其他应付款与应付款的区别
  • php的运算符主要包括哪些?
  • 长期借款还款
  • thinkphp5执行流程
  • phpstudy访问数据库
  • 工程未审计资金能支付到多少
  • 小规模企业购入固定资产怎么做账务处理
  • php中include_once
  • php远程调用
  • 弥补以前年度亏损最多几年
  • 怎样申请土地增值税补贴
  • 如何扣除企业接单费用
  • mongodb导出数据库数据文件
  • 没有发票的公账报销了怎么入账
  • 商品编码原则是指什么
  • 金税盘地区编号怎么查
  • 库存商品转成本意味着什么
  • 城镇土地使用税征收标准及计算方法
  • 无形资产入账
  • 以前年度多计提成本怎么处理
  • 销售退回的账务处理会计分录图片
  • 运输业户
  • 确认递延所得税资产账务处理
  • 未完工工程如何验收
  • 知识产权代理所代理
  • 实发工资高于工资表
  • 公司工会经费怎么花不违规
  • 自产产品与视同自产产品
  • 医院会计怎么做账
  • 工业企业销售商品分录
  • sql语句错误提示
  • ubuntu20.04怎么安装
  • 常用的网络操作命令
  • 电脑开机后显示xp界面后一直是黑屏状态
  • awk命令的功能是什么
  • 使用xshell连接虚拟机需要修改哪些配置
  • ubuntu 软件删除
  • nodejs静态编译
  • jquery validation
  • Node.js中的什么模块是用于处理文件和目录的
  • 用python做冒泡排序
  • nodejs中向HTTP响应传送进程的输出
  • u3d地形编辑贴图
  • settimeout和setinterval在安卓机无效
  • javascript中继承
  • Python中的除号
  • 委托代征管理办法最长有效期
  • 武汉市第二税务稽查局地址
  • 金融机构不包括
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设