二、GROUP BY的实现与优化
由于GROUP BY实际上也同样需要进行排序操作,而且与ORDER BY相比,GROUP BY主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP BY的实现过程中,与ORDER BY一样也可以利用到索引。
在MySQL中,GROUP BY的实现同样有多种(三种)方式
1、使用松散(Loose)索引扫描实现GROUP BY
何谓松散索引扫描实现GROUP BY呢?实际上就是当MySQL完全利用索引扫描来实现GROUP BY的时候,并不需要扫描所有满足条件的索引键即可完成操作得出结果。
在执行计划的Extra信息中有信息显示“Using index for group-by”,实际上这就是告诉我们,MySQL Query Optimizer通过使用松散索引扫描来实现了我们所需要的GROUP BY操作。
要利用到松散索引扫描实现 GROUP BY,需要至少满足以下几个条件:
◆ GROUP BY条件字段必须在同一个索引中最前面的连续位置;
◆ 在使用GROUP BY的同时,只能使用MAX和MIN这两个聚合函数;
◆ 如果引用到了该索引中GROUP BY条件之外的字段条件的时候,必须以常量形式存在;