我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 原理优化之Group By的优化技巧

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 原理优化之Group By的优化技巧

今天来看看mysql 中如何多Group By 语句进行优化的。

先创建tb_user 表如下:

MySQL 原理优化之Group By的优化技巧

通过show index from tb_user; 命令查看表,没有存在任何的索引。

MySQL 原理优化之Group By的优化技巧

执行如下代码,查看SQL 执行情况

explain select profession, count(*) from tb_user group by profession ;

MySQL 原理优化之Group By的优化技巧

发现返回结果中 type 为“ALL” ,Extra 返回“Using temporary” 说明没有使用索引。

于是,创建基于profession,age和status 的索引如下:

create index index_user_pro_age_sta on tb_user(profession ,age, status);

这里创建索引从左到右的顺序是 profession ,age, status。

此时再次执行SQL执行计划如下:

explain select profession, count(*) from tb_user group by profession ;

MySQL 原理优化之Group By的优化技巧

发现使用了索引“index_user_pro_age_sta”。说明在执行 group by操作的时候,使用联合索引是有效的。

接着在看使用如下代码:

explain select age, count(*) from tb_user group by age;

SQL 语句使用age 进行group by,查看explain的结果如下:

MySQL 原理优化之Group By的优化技巧

在Extra 字段中发现使用了“Using temporary”,说明没有走索引,是因为没有满足索引的最左前缀法则

联合索引 index_user_pro_age_sta的顺序从左到右分别是 profession ,age, status。

上面的SQL 语句Group by 后面接着的是age ,因此出现“Using temporary”。

这里对SQL 进行修改。如下:

explain select profession,age, count(*) from tb_user group by profession, age;

MySQL 原理优化之Group By的优化技巧

由于group by 后面跟着profession, age ,符合联合索引的创建顺序,因此索引生效。

我们再来试试再加入过滤条件的情况,加入profession = 软件工程,此时group by 里面只显示 age,那么此时是否会走索引, 答案是 using index。因为满足了最左前缀法则。

explain select age, count(*) from tb_user where profession = '软件工程' group by age;

MySQL 原理优化之Group By的优化技巧

总结一下:

SQL在分组操作的时候,可以通过索引来提高效率。做分组操作的时候,索引的使用需要满足最左前缀法则。

到此这篇关于MySQL 原理优化之Group By的优化技巧的文章就介绍到这了,更多相关MySQLGroup By优化内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 原理优化之Group By的优化技巧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 原理优化之Group By的优化技巧

今天来看看mysql 中如何多Group By 语句进行优化的。先创建tb_user 表如下:通过show index from tb_user; 命令查看表,没有存在任何的索引。执行如下代码,查看SQL 执行情况explailfyyP
2022-08-14

MySQL Group by的优化详解

一个标准的 Group by 语句包含排序、分组、聚合函数,比如 select a,count(*) from t group by a ; 这个语句默认使用 a 进行排序。如果 a 列没有索引,那么就会创建临时表来统计 a和 count
2022-05-15

MySQL group by语句如何优化

在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下:mysql> show create table t1\G *************************** 1. ro
2022-05-13

MySQL 原理与优化之Update 优化

前言:谈到Update 语句大家可能不会陌生,很多情况下我们都会使用它来更新table中的记录。一般而言我们会使用innodb 的存储引擎,innodb引擎是基于行锁的,具体一点说是针对索引来加锁python的(保证锁不能失效),并不是针
2022-08-14

MySQL 优化技巧

优化数据库结构优化数据大小→ 减少磁盘写入和读取的数据量→ 在查询执行期间主动处理其内容时主内存较少→ 产生更小的索引,可以更快地处理表格列尽可能使用最高效(最小)的数据类型如果可能,将列声明为 NOT NULL → 更好地使用索引并消除
MySQL 优化技巧
2024-10-15

怎么在MySQL中对Group by进行优化

本篇文章为大家展示了怎么在MySQL中对Group by进行优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一个标准的 Group by 语句包含排序、分组、聚合函数,比如 select a,co
2023-06-08

MySQL踩坑之-- group by 和 limit 组合使用效率优化

应公司业务需求,开发一个费用统计报表;其实本来没啥技术含量,但是踩了一个坑需要记录一下;相信大家在写统计sql的时候,group by是经常会用到的吧,如果数据量过大呢?是不是需要分页,这里就需要用到limit作查询限制,那么问题就来了
2023-08-18

Golang函数性能优化之优化技巧合集

通过应用以下技巧可优化 go 函数性能:1. 使用基准测试识别瓶颈;2. 避免动态分配,使用静态分配;3. 优化算法,如使用二分查找;4. 减少函数调用开销,内联代码或分解函数;5. 使用并发并行执行任务。运用这些技巧,可极大提升函数效率,
Golang函数性能优化之优化技巧合集
2024-04-18

EF Core优化技巧之预热处理

EF Core的预热问题是由于模型构建、元数据加载、数据库连接建立和查询计划生成等操作导致的。为了提高应用程序的性能,我们可以采取上述解决方案来优化EF Core的预热问题。

MySQL优化SQL语句的技巧

在面对不够优化、或者性能极差的SQL语句时,我们通常的想法是将重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升。而在重构SQL时,一般都有一定方法技巧可供参考,本文将介绍如何通过这些技巧方法来重构SQL。 一、
2022-05-24

MySQL 8.0 对 limit 的优化技巧

从不同版本的MySQL发展轨迹来看MySQL的优化器越来越智能(比如大家期待已久的直方图特性),能更多的减少人为干预,提升执行计划的准确性,这篇文章主要介绍了MySQL 8.0 对 limit 的优化,需要的朋友可以参考下
2022-11-13

mysql 数据库优化技巧

mysql 数据库优化 包括 a.表的设计合理化(符合3NF) b.添加适当索引(index[4种:普通索引 主键索引 唯一索引unique 全文索引]) c.分表技术(水平分割,垂直分割) d.读写[写:update/dele
2022-05-13

编程热搜

目录