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 相关文章推荐
多表查询、事务、DCL
Apr 05 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
Mysql中调试存储过程最简单的方法
Jun 30 MySQL
MySQL 十大常用字符串函数详解
Jun 30 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
MySQL的InnoDB存储引擎的数据页结构详解
Mar 03 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
mysql中DCL常用的用户和权限控制
Mar 31 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
MySQL聚簇索引和非聚簇索引的区别详情
Jun 14 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 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设计模式之命令模式的应用详解
2013/05/21 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
一个对于js this关键字的问题
2007/01/09 Javascript
function, new function, new Function之间的区别
2007/03/08 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
js代码实现随机颜色的小方块
2015/07/30 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
Flask框架WTForm表单用法示例
2018/07/20 Python
Python mutiprocessing多线程池pool操作示例
2019/01/30 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
2019/08/13 Python
python matplotlib库的基本使用
2020/09/23 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
澳大利亚巧克力花束和礼品网站:Tastebuds
2019/03/15 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
应聘自荐书
2013/10/08 职场文书
中专毕业生自荐信
2013/11/16 职场文书
大学生入党思想汇报
2014/01/14 职场文书
数控专业自荐书范文
2014/03/16 职场文书
党风廉政建设责任书
2014/04/14 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
毕业设计论文评语
2014/12/31 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python