mysql中groupby会用到索引吗_Mysqlgroupby实现方式(一)-索引扫描

由于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操作了


版权声明:本文为weixin_40009472原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。