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 22 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
如何设计高效合理的MySQL查询语句
May 26 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
MySQL分库分表详情
Sep 25 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
Mysql排序的特性详情
Nov 01 MySQL
MySQL 服务和数据库管理
Nov 11 MySQL
Mysql InnoDB 的内存逻辑架构
May 06 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
mysql拆分字符串作为查询条件的示例代码
Jul 07 MySQL
MySQL常用慢查询分析工具详解
Aug 14 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
NT IIS下用ODBC连接数据库
2006/10/09 PHP
Smarty模板快速入门
2007/01/04 PHP
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP strtr() 函数使用说明
2008/11/21 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php生成与读取excel文件
2016/10/14 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
Javascript typeof 用法
2008/12/28 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
json定义及jquery操作json的方法
2016/09/29 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
NodeJs测试框架Mocha的安装与使用
2017/03/28 NodeJs
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
JavaScript数据结构与算法之二叉树添加/删除节点操作示例
2019/03/01 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
Vue 自定义指令实现一键 Copy功能
2019/09/16 Javascript
Antd的table组件表格的序号自增操作
2020/10/27 Javascript
jQuery实现tab栏切换效果
2020/12/22 jQuery
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
澳大利亚牛仔裤商店:Just Jeans
2016/10/13 全球购物
Spartoo西班牙官网:法国时尚购物网站
2018/03/27 全球购物
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
行政专员岗位职责范本
2014/08/26 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android