位置: 编程技术 - 正文

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

  • 所得税费用影响企业利润总额吗
  • 应纳税额与应纳税所得额的比率
  • 出口税率和出口关税税率一样吗
  • 所得税费用怎么算分录
  • 行政事业单位决算编制流程图
  • 所得税费用影响净利润吗
  • 一张报关单可以分两次退税吗
  • 装卸搬运服务属于什么税目
  • 小微企业一般要交什么费用2019
  • 开办药品企业的要求
  • 甲供材和清包工的账务处理
  • 现金收货款要填什么单子
  • 公司美元账户收到美元要交税吗
  • 委托加工模具的费用计入什么科目?
  • 合同不含税怎么算
  • 增值税专用发票跨月退回怎么办?
  • 民办幼儿园需要给老师交五险一金吗
  • 金税盘费用如何抵扣
  • 开发票冲销
  • 报税时利润表没写怎么办
  • 折旧率通俗理解
  • 增量留底税额怎么进行确定
  • 如何代开外籍人员个人所得税完税凭证?
  • 买股票的分红怎么拿
  • 财务管理终值和现值
  • 2020快手怎么删除
  • 批量删除 超链接
  • PHP json_encode() 函数详解及中文乱码问题
  • 上市公司发行股票会计分录
  • 现金日记账漏记一笔怎么办
  • 制造业企业资金管理
  • 其他应付款如何调平
  • CodeIgniter针对数据库的连接、配置及使用方法
  • vuewatch监听对象及对应值的变化
  • thinkphp技巧
  • PHP使用pear实现mail发送功能 windows环境下配置pear
  • 工地扬尘检测仪防尘缸怎么安装
  • cloa框架
  • 前端面试题基础篇
  • 存货的期末计价属于会计政策吗
  • 工业企业总产值怎么算
  • 公司盖厂房没有票要交税吗?
  • python dict.item()方法遍历字典
  • 设备安装工程施工及验收规范
  • 小企业会计准则适用范围
  • 异地预缴附加税会计分录
  • 视同销售是指什么
  • 税控盘开票机号在哪里能查到
  • 个人所得税申报退税能退多少
  • 营业收入净额是利润表的哪个数
  • 财产清查两种制度
  • 企业所得税的步骤
  • 交车辆保险的车是什么车
  • 什么是金融资产和金融负债
  • 年终奖金个人所得
  • 村料采购会计科目有哪些
  • 购买的材料入库属于什么会计科目
  • 律师的行业
  • 预收账款变成了什么
  • 零星采购多少不需要发票
  • 收到补助款的会计分录
  • 发票以外的其他发票
  • 利润表中的营业收入怎么算出来的
  • 私企干不长久
  • windows隐藏文件夹开启
  • 笔记本用linux系统
  • centosgui
  • win7文件无法删除需要权限
  • windows移动中心英文怎么写
  • win10链接手机怎么用
  • win8如何更改默认存储位置
  • windows8网页版
  • iframe语法
  • css滤镜特效属于css样式定义分类中的
  • vue实现下载功能
  • python的设置
  • html5 jquery
  • 北京市地方税务局2015第10号文件
  • 滴灌带设备一套多少钱
  • 出口退税已提交数据撤回
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设