位置: 编程技术 - 正文

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

  • 出口退税逾期申报说明怎样写
  • 材料暂估可以跨年度吗
  • 进项税额的计税基础是什么
  • 房屋契税怎么交在手机上操作
  • 土地增值税清算方法与技巧
  • 招待客人的住宿费能抵扣吗?
  • 计提工资需要纳税调整吗
  • 自产产品用于职工福利确认收入吗
  • 划拨土地划转是什么意思
  • 报关单上单位名称写千克还是kg
  • 预提费用下月要冲回吗
  • 支付稿费演出费用怎么算
  • 超过认证期限的发票怎么处理
  • 建筑施工外包
  • 食堂购买食材明细表
  • 材料采购计入什么会计科
  • 收到借款利息怎么做会计分录
  • 营改增后劳务公司账务处理
  • 实收资本印花税申报期限
  • 租赁房使用权和所有权冲突
  • 代扣代缴增值税纳税义务发生时间
  • 高新技术企业认定管理办法
  • 送礼没有发票怎么解决
  • 航空公司票价怎么定的
  • 向股东分配股利会影响所有者权益吗
  • 新公司没收入之前费用都走开办费吗
  • microsoft edge怎么设置关闭所有网页
  • 苹果电脑mac系统怎么用
  • 现金流量表与资产负债表不符
  • php 注册
  • 业务招待费进项税额转出表二
  • 键盘突然打不出来字
  • 库存现金的含义及特点
  • hotkey可以卸载吗
  • 房屋装修固定家具是否计入房产税
  • 原材料因管理不善发生毁损
  • 微信小程序插件有哪些
  • Thinkphp事务操作实例(推荐)
  • 如何用java写接口
  • 逻辑回归模型
  • js实现功能
  • jasypt加密解密
  • 利润表管理费用包括哪些内容
  • 开发支出的含义
  • 连锁店会计的工作内容
  • spring框架使用教程
  • 迭代器实现原理
  • mysql导出结果
  • antd pro v5
  • 增值税纳税申报实训报告
  • 以旧换新有发票抵扣吗
  • SQL 联合查询与XML解析实例详解
  • 发票丢失一张罚款标准
  • 个人银行账户进账多少
  • 个人所得税纳税记录怎么查询
  • 交易性金融资产公允价值变动怎么算
  • 转增资本需要交税吗
  • 赠送的商品如何开发票
  • 发票系统中监控怎么设置
  • 商业医疗保险的缺点
  • sql server 2000中的安全性包含
  • 怎么在bios里设置usb开关
  • OS X 10.12.6 beta 1如何更新 OS X 10.12.6 beta 1如何升级
  • os x10.11el capitan公测版beta2官方下载地址
  • windows7开机
  • [置顶]公主大人接下来是拷问时间31
  • 全面了解自我,接纳和包容自我
  • nodeJS文件操作自动创建目录
  • cocos creator rpg
  • javascript的弹窗
  • java教程
  • jquery使用Cookie和JSON记录用户最近浏览历史
  • selenium在pycharm
  • 信息技术税务分类编码
  • Excel表格如何导出
  • 税务稽查预警指标
  • 发票代码如何查真伪
  • 江西公积金提取代办
  • 办税服务厅是税收工作的
  • 一巩固三衔接
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设