`

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方案

    本篇文章将深入探讨MySQL优化GROUP BY的策略。 ### 一、松散索引扫描(Loose Index Scan) 松散索引扫描是一种优化策略,适用于以下特定情况: 1. **查询只涉及一个表**。 2. **GROUP BY子句使用索引的最左前缀**...

    MySQL数据库优化SQL篇PPT课件.pptx

    从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和Count等方面对MySQL数据库优化进行了详细的讲解。 一、执行计划 执行计划是MySQL数据库优化的重要步骤。执行计划...

    mysql性能优化.pptx

    - 索引优化SQL:避免全表扫描,尽可能利用索引来加速查询,减少`SELECT`、`JOIN`、`ORDER BY`、`GROUP BY`操作的复杂度。 - 索引维护:定期重建和优化索引,确保其整洁高效。 4. **数据库表结构优化** - **数据...

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

    综上所述,理解并利用MySQL中的松散索引扫描和紧凑索引扫描可以帮助我们优化GROUP BY查询,提高数据库的性能,特别是在处理大量数据时。正确地设计索引和编写SQL语句可以显著减少资源消耗,提升应用程序的响应速度。

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

    优化 Group By 查询速度的实践经验 在实际项目中,遇到了表数据量大导致查询速度很慢的问题。通过记录和优化过程,总结出一些有价值的经验,希望能够帮助读者解决类似的问题。 知识点1:Group By 查询的索引设置 ...

    Mysql优化方法介绍.ppt

    在SQL语句层面,应避免全表扫描,合理使用JOIN,减少子查询,优化GROUP BY和ORDER BY操作。使用EXPLAIN分析查询执行计划,找出可能的性能瓶颈。另外,适当使用缓存如MySQL的Query Cache,可以提升查询速度。对于大...

    【DISTINCT】优化之MySQL官方文档翻译

    ### DISTINCT优化之MySQL官方文档翻译解析 #### 一、引言 在数据库查询操作中,经常需要使用`DISTINCT`关键字来去除重复记录,确保结果集中的每一条记录都是唯一的。然而,在某些场景下,使用`DISTINCT`可能会导致...

    MYSQL优化资料

    MySQL优化是指通过一系列技术和策略来提高数据库性能,确保系统能够高效地处理大量数据请求。以下是对MySQL优化的详细探讨: 一、SQL查询优化 1. 索引优化:创建合适的索引来加速查询。主键自动创建唯一索引,非...

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

    在优化`GROUP BY`查询时,可以考虑使用索引、减少JOIN操作、合理设计分组条件等方式来提升性能。在升级MySQL到5.7后遇到的`GROUP BY`查询问题,通常与新的严格模式有关,理解这些变化并相应地调整代码是解决问题的...

    辛星笔记之MySQL优化篇

    在深入探讨辛星笔记之MySQL优化篇的内容之前,我们首先要了解MySQL优化的几个关键方面,这将帮助我们更好地理解文档中提供的知识点。 MySQL优化通常包括对数据库查询的优化、数据库结构的设计优化、服务器配置的...

    MySQL数据库查询优化

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

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

    本文将详细记录一次针对GROUP BY查询效率低下的排查及优化过程,希望能够对读者有所帮助。 #### 问题背景 在一张名为`packet_buy_report`的数据表中,总记录数达到了17,235,162条。该表包含了多个字段,具体如下:...

    分析MySQL中优化distinct的技巧

    MySQL的优化器将`DISTINCT`操作转换为`GROUP BY`,使得查询在利用索引分组后,仅扫描一次所需的`nick`值。在新的执行计划中,`Using index for group-by`表明查询利用索引完成了分组操作,从而提高了效率。 通过...

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

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

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

    MySQL优化篇:排序分组优化,主要关注的是在使用order by和group by关键字进行查询时的性能优化。order by关键字用于对查询结果进行排序,而group by关键字用于对数据进行分组汇总。这两个操作在SQL语句中非常常见,...

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

    MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...

Global site tag (gtag.js) - Google Analytics