位置: 编程技术 - 正文

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

  • 公司户和个人户卖车的时候价格差多少
  • 税控盘280抵扣报税填在
  • 银行回单手续费分录
  • 劳务公司劳务工资做什么科目
  • 无偿划拨资产的入账价值
  • 主营业务收入计入什么明细账
  • 股利怎么算出来的
  • 采购商品验收入库流程
  • 设备免费提供给客户使用
  • 中国铁路建设债券
  • 进项发票与销项发票差额是企业毛利润吗
  • 金税盘与税控盘及报税盘怎么区分
  • 退税显示未完成怎么处理
  • 税收编码选错了,发票已经开出去几个月了,还有影响吗
  • 企业注销前需要固定资产清理吗
  • 通讯费 个税
  • 个人所得税0元算不算缴税
  • 火车票的进项税率是多少
  • 筹备期废品回收会计分录
  • php parse_url
  • 购入需要安装的设备的会计分录
  • Win10 19043.1237 9月累积更新 KB5005565推送(附更新修复+下载)
  • 应收账款需要计提坏账准备吗
  • php 实例
  • php最好的教程
  • php array_pop函数
  • 最早的笔记本是512m内存
  • 销项税和进项税抵扣的会计分录
  • PHP curl 或 file_get_contents 获取需要授权页面的方法
  • 增值税普通发票需要交税吗
  • PHP使用http_build_query()构造URL字符串的方法
  • 中国移动常被称为
  • 二元运算例子
  • 小程序开发定制
  • unrar解压命令
  • 税务自查报告要盖什么章
  • 个税累积税阶
  • phpcms生成html
  • 软件公司股权
  • mac os x10.9.5
  • mongodb导入数据三种方式
  • mongodb删除文档命令
  • kppw源码
  • 待处理财产损益是什么类科目借贷方向
  • mysql创建临时表并赋值
  • 银行承兑汇票是什么意思
  • 顺流交易为什么也要减
  • 合并报表两种方法
  • 营改增后,建筑行业与供应商签合同才怎样签没风险?
  • 社保缴纳的时候可以用吗
  • 如何开具发票?
  • 未分配利润转增股本要交税吗怎么交
  • mysql的知识点
  • mysql5.6下载
  • xp快捷桌面图标
  • putty怎么连接linux
  • 电脑出现nobootdevicefound咋办
  • 新手如何入门
  • linux命令su-
  • win7复制过的内容在哪
  • mac中quick-cocos2dx-2.2.5+sublime text 2搭建lua的开发环境
  • 使用jquery
  • windows常用命令操作
  • pycharm下载安装
  • Nodejs sublime text 3安装与配置
  • 搭建nodejs项目
  • nodejs创建项目
  • python3 django教程
  • python list set dict tuple
  • Vuforia How To Use Android Plugins in Unity Apps
  • jquery数组的方法
  • python的排序方法
  • jquery 选择
  • 使用jQuery制作动画与特效及插件的应用
  • 杭州电子税务局注册流程
  • 增值税归国家还是地方
  • 重庆国税电子税务局
  • 可转债中签当天扣款吗
  • 青岛振兴税务师招聘
  • 江西税务客服电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设