首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mysql group by实现方式(一) - 索引扫描

Mysql group by实现方式(一) - 索引扫描

作者头像
dys
发布于 2018-04-02 16:34:13
发布于 2018-04-02 16:34:13
1.5K0
举报
文章被收录于专栏:性能与架构性能与架构

由于GROUP BY实际上也同样须要进行排序操作,而且与ORDER BY相比,GROUP BY主要只是多了排序之后的分组操作。所以,在GROUP BY的实现过程中,与ORDER BY一样可以利用索引

例如有一个索引idx(c1,c2,c3)

SELECT c1, c2 FROM t1 WHERE c1 < 10 GROUP BY c1, c2;

这条查询就可以直接使用索引扫描完成

使用索引扫描需要什么条件?

(1)查询针对一个单表

(2)GROUP BY条件字段必须处在同一个索引中最前面的连续位置

(3)如果引用到了该索引中GROUP BY条件之外的字段条件,它就必须以常量形式存在

(4)在使用GROUP BY 的同时,如果有聚合函数,只能使用 MAX 和 MIN 这两个聚合函数,并且它们均指向相同的列

(5)当 GROUP BY 条件字段不是索引前缀部分的时候,where 中的条件字段需包含缺失的索引键,且是一个常量

例如 SELECT c1, c2 FROM t1 WHERE c2 = 10 GROUP BY c1, c3;

此GROUP BY使用c1, c3,缺失c2,不符合最左前缀原则,但where条件中有c2,并且条件值是个常量,所以就满足条件,可以使用索引完成group by操作了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档