关于数据库:MySQL分组优化

分组优化

在应用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多平台公布

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理