mysql group by语句流程是怎么样的

group by流程是怎么样的

注意点:

select id%10 as m, count(*) as c from t1 group by m;

  1. group by是用于对数据进行分组,我们排序用到了sort_buff,join用到了join_buff,group by就会用到 内部临时表。join_buffer 是无序数组,sort_buffer 是有序数组,临时表是二维表结构;
  2. 多使用explain分析sql语句,在 Extra 字段里面,我们可以看到三个信息:

  3. Using index,表示这个语句使用了覆盖索引,选择了索引 a,不需要回表;

  4. Using temporary,表示使用了临时表;
  5. Using filesort,表示需要排序。

  6. 使用内部临时表默认都是引擎,union和人工创建临时表都是使用到临时表。

  7. 如果你的需求并不需要对结果进行排序,那你可以在 SQL 语句末尾增加 order by null。
  8. 内存临时表也会有大小限制,如果临时表空间放不下数据,也会使用磁盘空间作为临时表的空间
  9. group by 的字段尽可能也需要索引,有序的数据, 在执行就可能不需要排序和临时表了。
  10. group by优化还可以不使用临时表,比如大量数据group by,临时表空间肯定不够,你可以在 group by 语句中加入 SQL_BIG_RESULT 这个提示(hint),就可以告诉优化器:这个语句涉及的数据量很大,请直接用磁盘临时表。这种情况下在explain就不会有使用了临时表的关键字了。直接排序使数据有序。有序数据就直接使用第6点性能优化。

流程如下:

  1. 创建内存临时表,表里有两个字段 m 和 c,主键是 m;
  2. 扫描表 t1 的索引 a,依次取出叶子节点上的 id 值,计算 id%10 的结果,记为 x;
  3. 如果临时表中没有主键为 x 的行,就插入一个记录 (x,1);如果表中有主键为 x 的行,就将 x 这一行的 c 值加 1;
  4. 遍历完成后,再根据字段 m 做排序,得到结果集返回给客户端。

mysql group by语句流程是怎么样的

这个语句需要排序,排序过程参考如下:

mysql group by语句流程是怎么样的

Original: https://www.cnblogs.com/penngke/p/15405989.html
Author: penngke
Title: mysql group by语句流程是怎么样的

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586008/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • CRC校验

    ​ 一:CRC概念 1.1、参考博客 参考的教程如下: 手算CRC及其实现 CRC校验算法原理分析 一文讲透CRC校验码-附赠C语言实例 CRC校验(手算与直观演示) CRC(循环…

    Linux 2023年6月13日
    090
  • The remote debugger is older than this version of Visual Studio 2019, and Visual Studio is no longer compatible with it. Upgrade your remote debugger to match Visual Studio.

    之前一直使用VS2019来打包到Xbox上,但是这两天有一个项目,只能用2017部署,于是下载了vs2017,然后这个2017的项目顺利打包到Xbox,但是2019的项目却部署失败…

    Linux 2023年6月13日
    077
  • Chrome的强大搜索功能

    前言 前几天一个好朋友求助我,大概问题是他的电脑QQ啥都能上网,就浏览器上不了网不是IE而是chrome,我第一反应可能是dns问题。后来发甩过来一张图,好家伙把我吓得,类似于下面…

    Linux 2023年6月14日
    0104
  • Mysql实战技能全解

    一、数据库原理 1 数据的分类 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人民共和国,民族:汉,性别:男,这都叫结构化数据 非结构化的数据…

    Linux 2023年6月7日
    0146
  • Kafka部署安装及简单使用

    一、环境准备 1、jdk 8+ 2、zookeeper 3、kafka 说明:在kafka较新版本中已经集成了zookeeper,所以不用单独安装zookeeper,只需要在kaf…

    Linux 2023年6月13日
    0120
  • Typora 最后免费版本也不能用了?简单一招搞定

    作者:小牛呼噜噜 | https://xiaoniuhululu.com计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 Typora是一款优秀的 Ma…

    Linux 2023年6月6日
    0113
  • 常用命令记录

    npm仓库查看和修改 npm config set registry https://registry.npm.taobao.org #设置使用淘宝提供的npm仓库 npm con…

    Linux 2023年6月14日
    076
  • 使用docker 5分钟搭建一个博客(mysql+WordPress)

    一.系统环境 二.前言 三.搭建博客 3.1 创建wordpress和mysql容器 3.2 在wordpress界面设置个人博客信息 3.3 WordPress容器创建命令的简化…

    Linux 2023年6月7日
    0113
  • CAP 5.1 版本发布通告 你期待的 Redis 来了

    前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱。 得益于社区的反馈和贡献者的支持,在…

    Linux 2023年5月28日
    0113
  • 文件相关命令

    pwd指令 基本语法:pwd功能:显示当前工作的绝对目录 ls指令 基本语法:ls [选项][目录或者文件]常用选项 -a 显示所有文件及目录 (. 开头的隐藏文件也会列出) -l…

    Linux 2023年6月6日
    088
  • 部署前后端为独立的 Docker 节点

    在『服务器部署 Vue 和 Django 项目的全记录』一文中,介绍了在服务器中使用 Nginx 部署前后端项目的过程。然而,当 Web 应用流量增多时,需要考虑负载均衡、流量分发…

    Linux 2023年6月7日
    0118
  • phpredis中文手册——《redis中文手册》 php版

    将值value关联到key,并将key的生存时间设为seconds(以秒为单位)。 这个命令类似于以下两个命令: O(1) SETRANGE SETRANGE key offset…

    Linux 2023年5月28日
    083
  • 软件工程 软件测试 第6篇随笔

    5、软件测试 1.软件测试的目的: 测试是一个为了发现错误而执行程序的过程 一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试用例 一个成功的测试是指揭示了迄今为止尚未发现…

    Linux 2023年6月7日
    0125
  • linux_arch

    由于以前新手开始接触的是ubuntu,然后通过ubuntu又开始了解centos,这俩系统基本是稳定版本可以用作服务器,但是centos的还是居多,一来比较接近redhat;但是这…

    Linux 2023年6月14日
    095
  • String为什么不是基本数据类型

    java虚拟机处理基础类型与引用类型的方式是不一样的,对于基本类型,java虚拟机会为其分配数据类型实际占用的内存空间,对于引用类型变量,他仅仅是一个指向堆区中某个实例的指针。 O…

    Linux 2023年6月7日
    0108
  • 单例模式也能玩出花

    一、单例模式 (1)单例模式 (2)单例模式实现要点 (3)使用场景当频繁创建、销毁某个对象时,可以考虑单例模式。当创建对象消耗资源过多时,但又经常使用时,可以考虑单例模式。 (1…

    Linux 2023年6月14日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球