位置: 编程技术 - 正文

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

  • 减免的增值税如何计算
  • 建筑企业印花税的计税依据
  • 提高资产利用率,增加销售收入
  • 非税项目明细代码
  • 销货清单是否需盖章
  • 登记多栏式日记总账的依据是
  • 商业银行委托贷款期限
  • 计提持有至到期投资减值准备
  • 质量问题扣款账务处理
  • 企业出口不退税怎么处理
  • 营改增开始试点到普及的行业
  • 外购固定资产进项税
  • 代付租金委托书怎么写
  • mac苹果电脑系统
  • 出口货物收汇核销流程
  • 收到政府财政拨款用于购买生产设备
  • 应收账款的差额计入哪里
  • 如何断开微软账户与电脑的链接
  • 财务软件的摊销额计入管理费用
  • 如何关闭win11系统
  • PHP:Memcached::incrementByKey()的用法_Memcached类
  • 企业的做账流程有哪些
  • 没有购入发票可以开出发票
  • 无偿赠送增值税问题
  • 大雾山国家公园总部加特林堡
  • FUXA个人学习总结(一)
  • 如何使用nodejs
  • 办公楼改造方案
  • 增值税价外费用是什么意思
  • 一次性取得的租金收入
  • 浅谈php中类和对象的区别
  • php lcg_value与mt_rand生成0~1随机小数的效果对比分析
  • 鹅卵石镇宅
  • 申请退税怎么算
  • 增值税密码锁定怎么办
  • c++简易游戏
  • 人工智能rl
  • aes加解密工具
  • php获取服务端ip
  • 残保金交错了怎么办
  • 理财资金用途
  • 酒店收取电费合理吗
  • 税控发票如何入账
  • 设计费可以抵扣进项吗
  • 厂房办公用品费用怎么算
  • 定额计税的有哪些
  • 多计提的增值税怎么冲减
  • 销货清单要放凭证里吗
  • 蓝字发票红字发票什么意思
  • 电话布线使用网络
  • 差旅费包括哪些费用
  • 公司赠送客户礼品怎么做账
  • 企业在期间新购进的设备、器具
  • 公司出资给另一个公司
  • 自产自销免税农产品需要缴纳印花税吗
  • 递延收益的会计核算
  • 普通日记账如何记账
  • 企业租用个人房屋的财税处理
  • 房地产企业会计科目
  • sqlserver数据库建库建表
  • sql游标用法
  • win8开机启动项怎么设置方法
  • macos怎么切换桌面
  • 应用商店升级版
  • 文件夹字体变成蓝色怎么恢复
  • win10周年更新版是什么意思
  • windows 7光盘
  • 教你如何解决蓝光机/KODI无法打开局域网smb共享的问题
  • 如何改变linux终端界面的颜色
  • win7系统点击图标没反应
  • nodejs npm package.json中文文档
  • 批处理执行另一个批处理
  • jquery和html的关系
  • shell脚本实例精讲
  • android开发从入门到精通(项目案例版)
  • jquery实现图片横向移动
  • comparable接口怎么用
  • 小规模一季度多少免增值税
  • 庐山坐缆车上去后还要买门票吗?
  • 国家税务北京税务局
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设