分组优化
在应用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多平台公布
发表回复