位置: 编程技术 - 正文

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

  • 创业投资企业可以按照其对中小高新技术企业投资额的
  • 企业境外参展 人员成本
  • 发票报销哪些要素不能少
  • 未入账的固定资产处理的财务处理
  • 企业中征码全称
  • 固定资产一次性扣除政策文件
  • 跨年度项目预算怎么安排
  • 营业外收入在资产负债表怎么填
  • 开票金额大于收款金额如何处理
  • 营业执照的注册地址怎么填
  • 企业合并以外
  • 假的手撕票已经入账了怎么办?
  • 个人机械租赁怎么纳税
  • 如何知道企业是查账征收还是核定征收
  • 企业为员工购买的补充医疗保险
  • 按折现率计算现值
  • 外帐的倒推流程是什么
  • 营改增后建筑业税率变化情况
  • 哪种情形
  • 支票入账怎么填写
  • 物业收取的滞纳金怎么算
  • 充值销售技巧和话术总结
  • 当月已认证的可抵扣增值税
  • 公司用库存商品怎么做账
  • 个税手续费返还要交增值税吗
  • 以前年度损益调整怎么做账
  • 现金收入支出表怎么填
  • 预算与决算对比分析
  • 什么是要约的撤销
  • 哪些费用发票可以报销
  • 销售部门品种多怎么说
  • 白醋洗脸有什么好处
  • 苹果macOS 13.3 RC 发河北承德市承德县华夏电器
  • 鸿蒙系统如何设置定位
  • PHP:session_unset()的用法_Session函数
  • 【C#+JavaScript+SQL Server】实现Web端在线考试系统 五:考试模块设计(附源码和资源)
  • word2vec使用方法
  • mkdir 命令
  • 因质量问题对方直接扣款怎么处理
  • 税号里面的0和O有区别吗
  • 大公司要求小规模公司交税
  • 软件无形资产摊销年限
  • 固定资产折旧计算表模板
  • 计提持有至到期债券投资的利息
  • 综合所得减除费用标准为60000.00元/年
  • 酒店客房收入会计分录
  • 以非现金资产清偿债务的方式下,债权人
  • 国有资产划转实施方案
  • 国有企业无偿划转股权缴纳印花税
  • 建筑业预缴税款怎么退税
  • 其他应收款借方负数代表什么意思
  • 公司内部核算调研报告
  • 固定资产处置办法
  • 如何整理装订记账凭证
  • ubuntu crontab
  • win10怎么取消u盘密码保护
  • Mac Chrome打开HTTPS证书错误问题解决方法
  • Win10 Mobile/PC RS2快速预览版14926同步推送
  • nalntsrv.exe - nalntsrv是什么进程 有什么用
  • win7突然变卡顿怎么回事
  • windows查看文件内容的命令
  • win7共享按钮灰色
  • shell脚本echo输出变量
  • 为什么你应该使用手机
  • mare的用法
  • 清理服务器c盘
  • 批处理是什么意思
  • jquery 列表实现
  • android 左右滑动 库
  • python redis incr
  • [置顶] 快来貌相则不达很好skmzx5
  • js 输入
  • jquery表单事件验证表单
  • python操作db2数据库
  • 进口商品的消费税计入成本吗
  • 销售旧货如何开票
  • 2020年砂石
  • 南通国税电子税务局
  • 郝姓家谱辈分查询
  • 社保uk申请流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设