MySQL 原理优化之Group By的优化技巧
先创建tb_user 表如下:
通过show index from tb_user; 命令查看表,没有存在任何的索引。
执行如下代码,查看SQL 执行情况
explain select profession, count(*) from tb_user group by profession ;发现返回结果中 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 ;发现使用了索引 index_user_pro_age_sta 。说明在执行 group by操作的时候,使用联合索引是有效的。
接着在看使用如下代码:
explain select age, count(*) from tb_user group by age;SQL 语句使用age 进行group by,查看explain的结果如下:
在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;由于group by 后面跟着profession, age ,符合联合索引的创建顺序,因此索引生效。
我们再来试试再加入过滤条件的情况,加入profession = 软件工程,此时group by 里面只显示 age,那么此时是否会走索引, 答案是 using index。因为满足了最左前缀法则。
explain select age, count(*) from tb_user where profession = 软件工程 group by age;总结一下:
SQL在分组操作的时候,可以通过索引来提高效率。做分组操作的时候,索引的使用需要满足最左前缀法则。
到此这篇关于MySQL 原理优化之Group By的优化技巧的文章就介绍到这了,更多相关MySQLGroup By优化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MySQL 原理优化之Group By的优化技巧
相关文章
- MySQL中添加字段的简单操作(mysql添加字段说明)
- MySQL配置优化:慢查询分析与解决(mysql配置慢查询)
- MySQL分库分表实现优化数据库性能(mysql分库分表)
- MySQL 文件大小限制(mysql文件限制)
- MySQL连表查询优化:提升数据库查询性能(mysql连表查询优化)
- MySQL十分钟内完成小时优化(mysql小时分钟)
- MySQL:死亡的悲伤(mysql死掉)
- 优化MySQL集群场景下的性能优化(mysql集群场景)
- MySQL 查询优化:提升查询性能的6大方法(mysql查询性能)
- MySQL 主主同步配置指南(mysql主主同步配置)
- MySQL索引的工作原理详解(mysql索引原理)
- 机制MySQL中大于、小于比较运算的索引优化机制(mysql大于小于索引)
- 台电脑MySQL在我的电脑上安装就绪.(mysql装在哪)
- Mysql定时自动化:每天一步之遥(mysql每天定时执行)
- MySQL中如何设置固定值?(mysql固定值)
- MySQL快速删除所有表的方法(mysql 删除全部表)
- MySQL 普通索引:优化查询性能的利器(mysql 普通索引)
- MySQL字符编码的显示方法(mysql显示字符编码)
- MySQL中的空值判断原理(mysql为空判断)
- Mysql查询优化小技巧避免or查询不走索引(mysql中or不走索引)
- Ace引擎驱动MySQL的实现(ace引擎和mysql)
- 优化方案MySQL优化颠覆你的思维,实现四种方案(4种mysql)
- MySQL优化技巧提升性能,MOF缓存实现快速读取数据库(mysql_mof)
- MySQL数据库如何设置上传文件大小(mysql上传大小设置)
- PHP学习mysql