位置: 编程技术 - 正文

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年第74号
  • 材料采购合同要盖章吗
  • 企业购买的衣服会计分录
  • 年末增值税结转账务处理流程
  • 劳务公司开的3%专用发票能抵扣吗
  • 新成立的公司怎么交公积金
  • 投资协议需要注意细节
  • 如何确定连锁店的纳税地点?
  • 生物性资产是什么
  • 补贴属于什么手段
  • 销售不动产增值税计税依据
  • 企业承担社保
  • 水利基金免税额度是多少
  • 金蝶k3初始余额录入打不进字
  • 软件产品登记证书官费
  • 审计查出假发票怎么补救
  • 认证成功次月何时补发
  • 以前年度损益申报怎么报所得税
  • 玩穿越火线总是提示机器遇到
  • 人力资源外包公司发展前景
  • 短期借款应付利息列报
  • 用系统自带命令行安装WIN10
  • 一个完整的php文件由哪些元素组成
  • 比较常见的病有哪些
  • 企业备用金多久还款
  • win11电脑怎么设置开机密码
  • 金融商品转让属于什么服务
  • 不动产出租管理办法
  • php each list
  • 扣缴义务人应扣未扣如何处罚
  • 信用减值损失在借方是增加还是减少
  • 什么是Unicode
  • 售后回购怎么做会计处理
  • 为什么我的命令提示符里显示user
  • 注意力机制加在什么位置
  • springboot+chatgpt+chatUI Pro开发智能聊天工具
  • jquery+thinkphp实现跨域抓取数据的方法
  • 企业销售旧固定产品
  • 财务没有及时缴费怎么办
  • 员工去外地培训费怎样入账
  • 固定资产一次性折旧政策2023
  • 什么企业的应急预案需要备案
  • 商务费用报销的工作步骤
  • 办培训机构需要什么条件手续
  • 收到法人的借款怎样写摘要
  • 实物出资没有发票怎么办
  • 产品保修要钱吗
  • 厂房违建如何处理
  • 关于购买安保器材的报告
  • 企业转让固定资产企业所得税
  • 收到红字进项发票先勾选再做转出吗
  • 收到??
  • SQL Server Table中XML列的操作代码
  • ubuntu桌面右键
  • iexplores.exe是什么病毒
  • win7 mysql
  • windows xp怎么清理c盘
  • vi编辑器的三种模式
  • win8关机慢怎么办
  • win8系统隐藏文件怎么查看
  • linux的web服务器
  • javascript折叠菜单
  • Unity3D游戏开发标准教程
  • 字符有大小吗
  • shell提示
  • unity manifest
  • python编程基础语法
  • js对象创建方法
  • androidstudio webview
  • jquery-validate
  • 车辆购置税计入固定资产一起折旧吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设