`

MySQL优化之group by

 
阅读更多

 

group by原理:先做order by操作,然后进行分组。

 

group by有三种实现形式,松散索引扫描,紧凑索引扫描和完全无法使用索引。

 

松散索引扫描 

 

松散索引扫描的松散的意思其实就是不用扫描所有满足条件的索引,每组索引可能有多个,但是只需要扫描每组的第一个或者最后一个即可。

 

比如:有这样一个索引IDX_ID_NAME_ADDR

select max(addr) from table where id < 10  group id,name ,比如说id = 5 name = 'test’的数据有十条算这组最大值的时候不用把10条全部取出来,都是本身索引就是有顺序的,所以只要选择最后一条数据即可。

 

这个名词的意思很容易忘记它的含义,而且看官方手册的时候新人很难看懂说的是啥。

只有明白了原理再去看官方手册,觉得奥原来是这样。

不过有个特点就是执行计划的extra里面显示的是:using index for group-by

 

松散索引的前提:

1.group by条件的字段必须在同一个索引中最前面的连续位置

2.在使用group by的同时,只能使用max和min这两个聚合函数

3.如果引用了该索引中group by条件之外的字段的时候,必须以常量的条件存在。

 

紧凑索引扫描:

 

紧凑索引扫描和上面不同,它需要读取该组内所有满足条件的索引。

比如group by id 如果id = 5 有十条索引满足,则十条全部读取出来。

 

紧凑索引扫描前提:

group by的字段不连续或者不是索引前缀,但是空缺的地方用常量来填充。

 

完全无法使用索引:

特点执行计划之中 extra:using temporary;using filesort

 

 

0
0
分享到:
评论

相关推荐

    MySQL优化GROUP BY方案

    满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建...

    MySQL数据库查询优化

    MySQL中:GROUP BY是怎么优化的?ORDER BY是怎么被优化?LIMIT是怎么被优化?DISTINCT是怎么被优化? 非SPJ优化与索引的关系。 预计时间1小时 第10课 MySQL物理查询优化技术概述 从理论看,物理查询优化技术的范围...

    mysql获取group by总记录行数的方法

    本文实例讲述了mysql获取group by总记录行数的方法,分享给大家供大家参考。具体方法分析如下: 一般来说,mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数。 mysql中可以使用...

    MySQL优化GROUP BY(松散索引扫描与紧凑索引扫描)

    满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建...

    mysql查询优化.

    1、理解MYSQL的Query Optimizer 2、Query语句优化基本思路和原则 3、充分利用Explain 和 Profiling 4、合理设计并利用索引 5、order by、group by 和 DISTINCT优化 6、小结

    mysql优化小技巧之去除重复项实现方法分析【百万级数据】

    本文实例讲述了mysql优化小技巧之去除重复项实现方法。分享给大家供大家参考,具体如下: 说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的DB,所以嘞,只能自己弄一下适合自己去重方法了...

    MySQL group by语句如何优化

    在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql&gt; show create table t1\G *************************** 1. row *************************** Table: t1...

    处理group by 查询速度太慢的问题 数据量大.doc

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    【mysql知识点整理】— order by 、group by 出现Using filesort原因详解

    文章目录测试数据1 sql执行顺序2 order by 和 group by什么时候会出现Using filesort — 理论3 order by 和 group by什么时候会出现Using filesort — 实践3.1 不会出现 Using filesort的情况 — 符合最佳左前缀法则...

    MySQL中索引优化distinct语句及distinct的多字段操作

    MySQL通常使用GROUPBY(本质上是排序动作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作组合使用,通常会用到临时表.这样会影响性能. 在一些情况下,MySQL可以使用索引优化DISTINCT操作,但需要活学活用.本文涉及一个...

    处理group by 查询速度慢的问题.docx

    实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

    MySQL数据库优化SQL

    MySQL数据库优化SQL20、查询显示每个雇员加入公司的准确时间,按××××年××月××日 时分秒显示; select ename, to_char(hiredate, 'yyyy-mm-dd hh24:mi:ss') from emp; 21、查询公司中按年份月份统计各地的...

    MySQL利用索引优化ORDER BY排序语句的方法

    创建表&创建索引 ...MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT

    MySQL语句优化的原则

    有大量重复值、且经常有范围查询( &gt; ,,&gt; =,)和order by、group by发生的列,可考虑建立群集索引;  b.经常同时存取多列,且每列都含有重复值可考虑建立组合索引;  c.组合索引要尽量使关键查询形成索引覆盖,...

    MYSQL GROUP BY用法详解

    现在需要把这些重复的数据删除掉,使用到的语句就是Group By来完成。为了进一步了解这条语句的作用,我打算先从简单入手。 建一个测试表 代码如下:create table test_group(id int auto_increment primary key, ...

    mysql千万级数据大表该如何优化?

    数据查询SQL条件:哪些数据项的列名称经常出现在WHERE、GROUP BY、ORDER BY子句中等; 4.数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中; 5.SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=...

    MySQL中distinct语句的基本原理及其与group by的比较

    DISTINCT 实际上和 GROUP BY 操作的实现非常相似,只不过是在 GROUP BY 之后的每组中只取出一条记录而已。所以,DISTINCT 的实现和 GROUP BY 的实现也基本差不多,没有太大的区别。同样可以通过松散索引扫描或者是...

    MySQL优化篇:排序分组优化.pdf

    主要包括order by关键字排序优化(无过滤不排序;顺序错,必排序;方向反,必排序;索引的选择;using filesort以及覆盖索引等内容)、group by关键字优化

Global site tag (gtag.js) - Google Analytics