分组优化
在应用 group by 进行分组时,实际上也须要进行排序操作,与 order by 相比,group by 次要是多了排序之后的分组操作
group by 的实现有三种形式
- 应用涣散索引扫描实现 group by
- 应用紧凑索引扫描实现 group by
<!– more –>
应用涣散索引扫描实现 group by
MySQL 齐全利用索引扫描来实现 group by
在应用 explain 执行打算时 extra 字段中呈现 using index for group by 示意应用了涣散索引扫描实现的 group by 操作
须要满足的条件
- group by 条件字段必须在同一个索引中最后面的间断地位
- 在应用 group by 的同时,只能应用 min 和 max 这两个聚合函数
- 如果用到了该索引中 group by 条件之外的字段条件时,必须以常量模式存在
应用紧凑索引扫描实现 group by
紧凑索引与涣散索引的区别次要在于须要在扫描索引的时候,读取所有满足条件的索引键,而后依据读取到的数据来实现 group by 操作失去相应的后果
MySQL 会先尝试应用涣散索引扫描实现 group by,当发现条件不满足时,才会尝试应用紧凑索引扫描
当 group by 条件字段并不间断或者不是索引前缀局部的时候,无奈应用涣散索引扫描,才会尝试应用紧凑索引扫描来实现
应用长期表实现 group by
MySQL 在进行 group by 操作的时候要想利用索引,必须满足 group by 的字段必须同时寄存于同一个索引,且该索引是一个有序索引,如果无奈找到适合的索引能够利用的时候,就不得不先读取须要的数据,而后通过长期表来实现 group by 操作
https://zhhll.icu/2021/ 数据库 / 关系型数据库 /MySQL/ 进阶 /28. 分组优化 /
本文由 mdnice 多平台公布