位置: 编程技术 - 正文

MySQL下的RAND()优化案例分析(mysql random函数)

编辑:rootadmin

推荐整理分享MySQL下的RAND()优化案例分析(mysql random函数),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:mysql rank(),mysqlrand()函数怎么用,mysql rand()会生成重复的随机数,mysql中rand,mysqlrand()函数怎么用,mysqlrand()函数怎么用,mysql中rand()函数怎么用,mysql中rand,内容如对您有帮助,希望把文章链接给更多的朋友!

众所周知,在MySQL中,如果直接 ORDER BY RAND() 的话,效率非常差,因为会多次执行。事实上,如果等值查询也是用 RAND() 的话也如此,我们先来看看下面这几个SQL的不同执行计划和执行耗时。首先,看下建表DDL,这是一个没有显式自增主键的InnoDB表:

往这个表里灌入一些测试数据,至少万以上, id 字段也是乱序的。

1、常量等值检索:

可以看到执行计划很不错,是常量等值查询,速度非常快。

2、使用RAND()函数乘以常量,求得随机数后检索:

可以看到执行计划很糟糕,虽然是只扫描索引,但是做了全索引扫描,效率非常差。因为WHERE条件中包含了RAND(),使得MySQL把它当做变量来处理,无法用常量等值的方式查询,效率很低。

我们把常量改成取t_innodb_random表的最大id值,再乘以RAND()求得随机数后检索看看什么情况:

可以看到,执行计划依然是全索引扫描,执行耗时也基本相当。

3、改造成普通子查询模式 ,这里有两次子查询

可以看到,执行计划也不好,执行耗时较慢。

4、改造成JOIN关联查询,不过最大值还是用常量表示

MySQL下的RAND()优化案例分析(mysql random函数)

这时候执行计划就非常完美了,和最开始的常量等值查询是一样的了,执行耗时也非常之快。这种方法虽然很好,但是有可能查询不到记录,改造范围查找,但结果LIMIT 1就可以了:

可以看到,虽然执行计划也是全索引扫描,但是因为有了LIMIT 1,只需要找到一条记录,即可终止扫描,所以效率还是很快的。

小结:从数据库中随机取一条记录时,可以把RAND()生成随机数放在JOIN子查询中以提高效率。

5、再来看看用ORDRR BY RAND()方式一次取得多个随机值的方式:

全索引扫描,生成排序临时表,太差太慢了。

6、把随机数放在子查询里看看:

嗯,提速了不少,这个看起来还不赖:)

7、仿照上面的方法,改成JOIN和随机数子查询关联

可以看到,全索引检索,发现符合记录的条件后,直接取得行,这个方法是最快的。

综上,想从MySQL数据库中随机取一条或者N条记录时,最好把RAND()生成随机数放在JOIN子查询中以提高效率。上面说了那么多的废话,最后简单说下,就是把下面这个SQL:

改造成下面这个:

如果想要达到完全随机,还可以改成下面这种写法:

就可以享受在SQL中直接取得随机数了,不用再在程序中构造一串随机数去检索了。

在MySQLDump中使用-w语句进行备份的方法 我们在用mysqldump备份数据时,有个选项是?where/-w,可以指定备份条件,这个选项的解释是:-w,--where=nameDumponlyselectedrecords.Quotesaremandatory我们可以做个测

MySQL中DATE_FORMATE函数使用时的注意点 今天帮同事处理一个SQL(简化过后的)执行报错:mysqlselectdate_format('--','Y-m-d')timediff('--','--');ERROR(HY):Illegalmixofcollations(utf8_general_c

关于MySQL的整型数据的内存溢出问题的应对方法 今天接到一个朋友电话说是觉的数据库被别人更改了,出现数据不对的问题。经过很久的排查是数据类型溢出了(发生问题的版本是MySQL5.1)。后来通过

标签: mysql random函数

本文链接地址:https://www.jiuchutong.com/biancheng/347341.html 转载请保留说明!

上一篇:批量杀死MySQL连接的四种方法详解(mysql批量删除数据库死锁)

下一篇:在MySQLDump中使用-w语句进行备份的方法(mysql中mysqldump)

  • 递延所得税资产借贷方向
  • 视同销售是指什么
  • 收据收到写什么
  • 普票需要填写全部开票信息吗
  • 车辆保险车船税怎么做会计分录
  • 员工向用人单位签加班协议书范本
  • 季度所得税申报表营业收入怎么填
  • 不合格发票入账责任
  • 无形资产出售收入属于营业收入吗
  • 被投资企业减资怎么做账
  • 为什么开增票要加点
  • 生产企业原材料的订购与运输论文
  • 出口退税是退进项
  • 防暑降温需要缴什么费用
  • 土地使用税源编明细表怎么填
  • 对公账户的利息收入如何入账
  • 企业的其他业务收入
  • 政府补贴专项资金如何入账
  • 扬声器音量调节
  • 表单提交错误后怎么撤销
  • mcrlnstaller
  • 支付广告费会计怎么做账
  • win10 累积更新
  • 强化税收风险意识
  • mozilla是什么文件
  • css禁用button按钮
  • 委托代销商品发票是谁开给客户
  • 流转税的计税依据有哪些
  • 季节性用工政策
  • php解析配置文件
  • 布莱顿小镇介绍
  • php引用传值
  • css中的hover属性
  • mongodb从入门到商业实战
  • 职工教育经费税收金额怎么算
  • 预付账款主要核算哪些内容
  • 年金终值系数是指已知( ),求终值
  • 房产税从租和从价哪个税金高
  • 工程结算科目
  • mysql 5.7.1
  • 免征增值税的会计处理
  • 财务会计和预算会计金额可以不等吗
  • 多缴附加税退税怎么做账
  • 工会费可以发现金吗
  • 金税卡就是税控盘吗
  • 生产企业免抵退是什么意思
  • 七天年化收益率2%
  • 营业收入的核算方式有哪些
  • 出资入股是什么意思
  • 专项资金的账务处理 借:银行存款 贷:其他应付款
  • 租金摊销会计分录
  • 房地产老项目简易计税开专票
  • 发生坏账时的分录
  • 新公司初期费用全部入哪里
  • 丢失的发票怎么查询
  • 公司里的废品的处理一般是谁负责
  • 银行回单自助打印可以打多久的记录
  • 没有水电费发票可以入账吗
  • 发票开票服务名称
  • mac系统怎么打开任务管理器
  • 苹果官网
  • mac dock栏不见了
  • windows安装软件需要管理员权限
  • linux0.01编译
  • win8软件不兼容怎么办
  • win10可以关闭的功能
  • 事件委托实现
  • 关于javascript函数
  • css应用领域
  • linux中tar命令
  • 深入解读2023年一号文件
  • jquery动画让div旋转
  • jquery的底层原理
  • python默认方法
  • javascript中如何获取元素?
  • 湖北省税务稽查局领导班子名单
  • 企业购票员有风险吗
  • 海员证办理流程需要什么手续时间多长
  • 湖北省国家税务局官网
  • 会计审计和税务服务属于什么税目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设