首页 > 数据库 >mysql随机取数据优化

mysql随机取数据优化

时间:2022-11-11 16:34:07浏览次数:67  
标签:rand t1 随机 mysql table 优化 id SELECT

参考:https://blog.csdn.net/u011870280/article/details/87809570

mysql表中随机取三条数据。

本来是打算用:

`select * from table order by rand() limit 3`


结果40W的表查询要2.6秒,速度贼慢。每条记录都调用了rand()行数来排序

后来发现mysql官方手册也不推荐这种做法,找到下面这种方法:

`

1.  SELECT * FROM table  AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table)) AS id) AS t2 WHERE t1.id >= t2.id
    
2.  ORDER BY t1.id ASC LIMIT 3
    

`


不过这种方式不适用,它需要一个自增注解,而我的表主键是uuid。而且不均匀

后来又在网上找到下面这种方法

`

1.  SELECT * FROM table WHERE id IN 
    
2.  (SELECT id FROM (SELECT id FROM table ORDER BY rand() LIMIT 3) t)
    

`


查询只要0.3秒,效果贼好。原因是因为排序时只把id加载到内存,在sort buffer中排序,没有加载所有字段,减少了磁盘读取。而为什么用两层查询是因为这个:

mysql不支持在in里面放子查询(/ □ \)

标签:rand,t1,随机,mysql,table,优化,id,SELECT
From: https://www.cnblogs.com/kuangke/p/16880919.html

相关文章

  • CentOS7 安装mysql8
    1、下载并解压mysql安装包https://downloads.mysql.com/archives/community/  放到服务器后解压-C放到指定文件夹tar-xvfmysql-8.0.30-linux-glibc2.12-x86......
  • MySql - 基础学习 - JDBC
    一.为什么要学习JDBCSUM公司为了简化开发人员的操作(对数据库的统一),提供了一个规范(Java操作数据库的规范),俗称:JDBC这些规范的实现是由厂商们去做~对于开发人员来说,我们只......
  • MySQL慢查询(中):正确的处理姿势,你get到了吗?
    正文共: 5156字 6图  预计阅读时间: 13分钟上篇回顾继上篇:​​MySQL慢查询(上):你知道为啥会慢么?​​在上一篇内容中,我们一起探索了这些内容:SQL执行过程查询SQL为什么会慢......
  • Mysql详解
    Mysql的介绍【1】MySQL是一个轻量级关系型数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,就增加了速度并提高了灵活性。【2】sql语言分类:名......
  • Pytorch随机种子设置及原理
    深度学习网络模型中初始的权值参数通常都是初始化成随机数,而使用梯度下降法最终得到的局部最优解对于初始位置点的选择很敏感,下面介绍Pytorch中随机种子的设置及其原理。......
  • mac中mysql3306端口被占用
    需求:本地mysql端口连到k8s集群中 报错:Unabletolistenonport3306:Listenersfailedtocreatewiththefollowingerrors:[unabletocreatelistener:Errorl......
  • MySQL-sql_mode=only_full_group_by解决方式
    报错问题:SQLSyntaxErrorException:Expression#1ofSELECTlistisnotinGROUPBYclauseandcontainsnonaggregatedcolumn'selad.id'whichisnotfunctionally......
  • 20221111_T1B_线段树优化建图/并查集
    题意给定一个字符串,其中只有a和b,现在一个字符能够跳到与之中间a的个数范围在\([l,r]\)的东西。题解赛时得分:100/100对于一个东西,显然如果将能相互到达连边,那么......
  • Mysql数据库函数-单行函数
    一.单行函数:可以理解为向函数传入一个参数,返回一个值。单行函数是指对每一题记录输入值进行计算,并得到相应的计算结果,然后返回给用户,也就是说,每条记录作为一个输入参数,经......
  • docker安装mysql8
    1、问题描述docker安装mysql8,记录下;2、问题说明2.1查看下目前服务器镜像dockerimages2.1拉取最新mysql,5.8版本dockerpullmysql2.3run,构建容器命令:docker......