加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL中group by的实现原理

发布时间:2022-09-27 14:51:10 所属栏目:MySql教程 来源:
导读:  在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。

  GroupBy会默认按照分组的字段进行排序;如果不需要
  在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索引信息来完成 GROUP BY,另外一种为完全无法使用索引的场景下使用。
 
  GroupBy会默认按照分组的字段进行排序;如果不需要排序,可使用order by null
 
  使用松散(Loose)索引扫描实现 GROUP BY
 
  MySQL 完全利用索引扫描来实现GROUP BY ,并不需要扫描所有满足条件的索引键即可完成操作得出结果。
 
  Extra信息中显示:Using index for group-by 要利用到松散索引扫描实现 GROUP BY,需要至少满足以下几个条件:
 
  ◆GROUP BY 条件字段必须在同一个索引中最前面的连续位置;
 
  ◆在使用GROUP BY 的同时,只能使用 MAX 和 MIN 这两个聚合函数;
 
  ◆如果引用到了该索引中 GROUP BY 条件之外的字段条件的时候,必须以常量形式存在; 松散索引扫描需要读取的键值数量与分组的数量一样多mysql原理,尽可能读取最少数量的关键字。使用紧凑(Tight)索引扫描实现 GROUP BY
 
  和松散索引扫描的区别是需要读取所有满足条件的索引值,之后取数据完成操作。
 
  Extra中不显示for group-by 在 MySQL 中,首先会选择尝试通过松散索引扫描来实现 GROUP BY 操作,当发现某些情况无法满足松散索引扫描实现 GROUP BY 的要求之后,才会尝试通过紧凑索引扫描来实现。(比如GROUP BY 条件字段并不连续或者不是索引前缀部分的时候)使用临时表实现 GROUP BY
 
  当无法找到合适的索引可以利用的时候,就不得不先读取需要的数据,然后通过临时表来完成 GROUP BY 操作。
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!