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


Posted in MySQL onAugust 14, 2022
目录

今天来看看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优化内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
mysql查询的控制语句图文详解
Apr 11 MySQL
MySQL性能压力基准测试工具sysbench的使用简介
Apr 21 MySQL
如何用Navicat操作MySQL
May 12 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
MySQL快速插入一亿测试数据
Jun 23 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
SQL语法CONSTRAINT约束操作详情
Jan 18 MySQL
Mysql分析设计表主键为何不用uuid
Mar 31 MySQL
手把手带你彻底卸载MySQL数据库
Jun 14 MySQL
mysql数据库隔离级别详解
Jun 16 MySQL
Mysql中mvcc各场景理解应用
Aug 05 MySQL
mysql函数之截取字符串的实现
Aug 14 #MySQL
MySQL 原理与优化之原数据锁的应用
MySql按时,天,周,月进行数据统计
Aug 14 #MySQL
MySQL中LAG()函数和LEAD()函数的使用
Aug 14 #MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 #MySQL
MySQL数据库查询之多表查询总结
Aug 05 #MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 #MySQL
You might like
php基础知识:类与对象(1)
2006/12/13 PHP
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
jquery 常用操作方法
2010/01/28 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
javascript实现Emrips反质数枚举的示例代码
2017/12/06 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
jQuery中的for循环var与let的区别
2018/04/21 jQuery
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
微信小程序swiper使用网络图片不显示问题解决
2019/12/13 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
2018/06/22 Python
Django 再谈一谈json序列化
2020/03/16 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
用CSS3的box-reflect来制作倒影效果
2016/11/15 HTML / CSS
详解Html5 Canvas画线有毛边解决方法
2018/03/01 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
高中生毕业自我鉴定范文
2013/12/22 职场文书
医院总经理职责
2013/12/26 职场文书
商务考察邀请函范文
2014/01/21 职场文书
销售员岗位职责范本
2014/02/03 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
护理专业求职信
2014/06/15 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
自我推荐信怎么写
2015/03/24 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL
python神经网络ResNet50模型
2022/05/06 Python