mysql原理与优化,groupby优化技巧

51CTO崔皓 51CTO崔皓     2022-11-30     694

关键词:

MySQL

今天来看看MySQL 中如何多Group By 语句进行优化的。

先创建tb_user 表如下


MySQL

通过show index from tb_user; 命令查看表,没有存在任何的索引。


MySQL

执行如下代码,查看SQL 执行情况

explain select profession, count(*) from tb_user group by profession ;

MySQL

发现返回结果中 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


发现使用了索引“index_user_pro_age_sta”。说明在执行 group by操作的时候,使用联合索引是有效的。

接着在看使用如下代码:

explain select age, count(*) from tb_user group by age;

SQL 语句使用age 进行group by,查看explain的结果如下:


MySQL

在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 后面跟着profession, age ,符合联合索引的创建顺序,因此索引生效。

我们再来试试再加入过滤条件的情况,加入profession = 软件工程,此时group by 里面只显示 age,那么此时是否会走索引, 答案是 using index。因为满足了最左前缀法则。

explain select age, count(*) from tb_user where profession = 软件工程 group by age;


MySQL


总结一下:

SQL在分组操作的时候,可以通过索引来提高效率。

做分组操作的时候,索引的使用需要满足最左前缀法则。

mysql原理与优化:update优化

​谈到Update语句大家可能不会陌生,很多情况下我们都会使用它来更新table中的记录。一般而言我们会使用innodb的存储引擎,innodb引擎是基于行锁的,具体一点说是针对索引来加锁的(保证锁不能失效),并不是针对记录加锁,... 查看详情

mysql性能调优05_覆盖索引索引下推如何选择合适的索引orderby与groupby优化索引设计原则(代码片段)

文章目录①.坏境准备②.覆盖索引、索引下推③.Mysql如何选择合适的索引④.Orderby与Groupby优化⑤.filesort文件排序方式(了解)⑥.索引设计原则①.坏境准备CREATETABLE`employees`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(24)NOTNU... 查看详情

mysql优化技巧(代码片段)

MySQL优化三大方向①优化MySQL所在服务器内核(此优化一般由运维人员完成)。②对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。③对SQL语句以及表优化。MySQL参数优化1:MySQL默认的最大连接数为100... 查看详情

mysql(20)—临时表的原理以及优化手段(代码片段)

MySQL的临时表的原理以及优化手段。文章目录1临时表2union临时表优化3groupby临时表优化1临时表sortbuffer、内存临时表和joinbuffer,这三个数据结构都是用来存放语句执行过程中的中间数据,以辅助SQL语句的执行的。其中࿰... 查看详情

一次groupby+orderby性能优化分析(代码片段)

一次groupby+orderby性能优化分析最近通过一个日志表做排行的时候发现特别卡,最后问题得到了解决,梳理一些索引和MySQL执行过程的经验,但是最后还是有5个谜题没解开,希望大家帮忙解答下。主要包含如下知识点用数据说话证... 查看详情

数据库原理以及sql优化:数据库调优基础入门(代码片段)

1简介发现慢查询日志与分析分析EXPLAIN、SQL性能分析、optimizertrace…调优理论索引的原理、创建索引的技巧、索引失效特定语句的原理与优化JOIN、LIMIT、COUNT、GROUPBY、ORDERBY、表结构设计原则PerconaToolkitfoodie-dec项目慢SQL调优实战2数... 查看详情

数据库原理以及sql优化:数据库调优基础入门(代码片段)

1简介发现慢查询日志与分析分析EXPLAIN、SQL性能分析、optimizertrace…调优理论索引的原理、创建索引的技巧、索引失效特定语句的原理与优化JOIN、LIMIT、COUNT、GROUPBY、ORDERBY、表结构设计原则PerconaToolkitfoodie-dec项目慢SQL调优实战2数... 查看详情

101个mysql调试和优化技巧

101个MySQL调试和优化技巧MySQL是一个功能强大的开源数据库。随着越来越多的数据库驱动的应用程序,人们一直在推动MySQL发展到它的极限。这里是101条调节和优化MySQL安装的技巧。一些技巧是针对特定的安装环境的,但这... 查看详情

mysql数据库day03-数据库mysql的优化(代码片段)

数据库优化SQL优化SQL优化步骤查看SQL执行频率定位慢查询SQL分析SQL执行计划分析SQL执行耗费分析SQL优化器执行计划SQL优化实例批量插入大量数据优化主键顺序插入关闭唯一性校验关闭自动提交事务INSERT语句优化ORDERBY语句优化两... 查看详情

mysql数据库day03-数据库mysql的优化(代码片段)

数据库优化SQL优化SQL优化步骤查看SQL执行频率定位慢查询SQL分析SQL执行计划分析SQL执行耗费分析SQL优化器执行计划SQL优化实例批量插入大量数据优化主键顺序插入关闭唯一性校验关闭自动提交事务INSERT语句优化ORDERBY语句优化两... 查看详情

由浅入深探究mysql索引结构原理性能分析与优化

摘要:第一部分:基础知识第二部分:MYISAM和INNODB索引结构1、简单介绍B-treeB+tree树2、MyisAM索引结构3、Annode索引结构4、MyisAM索引与InnoDB索引相比较第三部分:MYSQL优化1、表数据类型选择2、sql语句优化(1)  最左前缀原则(1.1... 查看详情

由浅入深探究mysql索引结构原理性能分析与优化

摘要:第一部分:基础知识第二部分:MYISAM和INNODB索引结构1、简单介绍B-treeB+tree树2、MyisAM索引结构3、Annode索引结构4、MyisAM索引与InnoDB索引相比较第三部分:MYSQL优化1、表数据类型选择2、sql语句优化(1)  最左前缀原则(1.1... 查看详情

groupby的优化

---title:不懂SQL优化?那你就OUT了(七)MySQL如何优化--groupbydate:2018-12-15categories:数据库优化---  上一篇我们主要讨论了orderby的优化,这一篇我们继续讨论groupby的优化。groupby子句在进行分组时一般的方法(如果没有合适的索引... 查看详情

sum与groupby语句的优化

一.SUM与GROUPBY语句的优化:1.原语句为:SELECTIID.INVENTORY_ITEM_ID,SUM(IID.AVAILABLE_TO_PROMISE_DIFF),SUM(IID.QUANTITY_ON_HAND_DIFF),SUM(IID.ACCOUNTING_QUANTITY_DIFF)FROMBOSENT.INVENTORY_ITEM_DETAILIIDWHERE((IID.I 查看详情

join的实现原理及优化思路

前言前面我们已经了解了MySQLQueryOptimizer的工作原理,学习了Query优化的基本原则和思路,理解了索引选择的技巧,这一节我们将围绕Query语句中使用非常频繁,且随时可能存在性能隐患的Join语句,继续我们的Query优化之旅。 J... 查看详情

索引原理与慢查询优化

 一、MySQL索引管理   1、功能(1).索引的功能就是加速查找(2).mysql中的primarykey,unique,联合唯一也都是索引,这些索引除了加速查找以外,还有约束的功能普通索引INDEX:加速查唯一索引:-主键索引PRIMARYKEY:... 查看详情

mysql索引使用与优化(代码片段)

...大程度上可以说就是集中在索引的优化上;mysql索引原理在正式了解与学习mysql索引之前,先对mysql的索引原理再次回顾下; 查看详情

转join的实现原理及优化思路

前言前面我们已经了解了MySQLQueryOptimizer的工作原理,学习了Query优化的基本原则和思路,理解了索引选择的技巧,这一节我们将围绕Query语句中使用非常频繁,且随时可能存在性能隐患的Join语句,继续我们的Query优化之旅。 J... 查看详情