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