当前位置:网站首页>MySQL 原理与优化,Group By 优化 技巧
MySQL 原理与优化,Group By 优化 技巧
2022-08-09 11:58:00 【51CTO】
今天来看看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在分组操作的时候,可以通过索引来提高效率。
做分组操作的时候,索引的使用需要满足最左前缀法则。
边栏推荐
- 【Basic model】Transformer-实现中英翻译
- Common gadgets of Shell (sort, uniq, tr, cut)
- 防止数据冒用的方法
- 罗振宇折戟创业板/ B站回应HR称用户是Loser/ 腾讯罗技年内合推云游戏掌机...今日更多新鲜事在此...
- Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接
- 金融业“限薪令”出台/ 软银出售过半阿里持仓/ DeepMind新实验室成立... 今日更多新鲜事在此...
- 2022 全球 AI 模型周报
- 研发需求的验收标准应该怎么写? | 敏捷实践
- Shell之常用小工具(sort、uniq、tr、cut)
- 李开复花上千万投的缝纫机器人,团队出自大疆
猜你喜欢
【Robustness of VQA-1】——2019-EMNLP-Don’t Take the Easy Way Out
索引index
李开复花上千万投的缝纫机器人,团队出自大疆
Shell之常用小工具(sort、uniq、tr、cut)
LeetCode #101. 对称二叉树
mysql + redis + flask + flask-sqlalchemy + flask-session 配置及项目打包移植部署
shell脚本------函数的格式,传参,变量,递归,数组
IDEA 关闭/开启引用提示Usages
金融业“限薪令”出台/ 软银出售过半阿里持仓/ DeepMind新实验室成立... 今日更多新鲜事在此...
基于STM32+铂电阻设计的测温仪
随机推荐
TIC2000系列处理器在线升级
API调用,API传参,面向对接开发,你真的会写接口文档吗?
Golang学习之路(五):Golang的函数
【小程序】低代码+小游戏=小游戏可视化开发
实验记录:搭建网络过程
国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...
Gumbel_Softmax 概要
Django 无法链接mysql数据库
我们真的需要DApp吗?App真的不能满足我们的幻想吗?
Reading and writing after separation, performance were up 100%
ACM01 Backpack problem
香港服务器如何进行加密?
西湖大学教授怎么看AI制药革命?|量子位智库圆桌实录
ACM longest non-descent subsequence problem
在北京参加UI设计培训到底怎么样?
李开复花上千万投的缝纫机器人,团队出自大疆
学长告诉我,大厂MySQL都是通过SSH连接的
Information system project managers must memorize the core test sites (63) The main process of project portfolio management & DIPP analysis
LeetCode #101. 对称二叉树
报告:想学AI的学生数量已涨200%,老师都不够用了