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 08 MySQL
MySQL 重写查询语句的三种策略
May 10 MySQL
解析MySQL binlog
Jun 11 MySQL
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
Jun 26 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
MySQL中IO问题的深入分析与优化
Apr 02 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
MySQL数据库配置信息查看与修改方法详解
Jun 25 MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 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相关资料
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
axios学习教程全攻略
2017/03/26 Javascript
JS设计模式之策略模式概念与用法分析
2018/02/05 Javascript
python3中set(集合)的语法总结分享
2017/03/24 Python
Python实现简单的语音识别系统
2017/12/13 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Python多进程fork()函数详解
2019/02/22 Python
pycharm快捷键汇总
2020/02/14 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
Python基于当前时间批量创建文件
2020/05/07 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
小学运动会入场式解说词
2014/02/18 职场文书
2014年预备党员学习两会心得体会
2014/03/17 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
检讨书范文
2015/01/27 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
单位工资证明范本
2015/06/12 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers