mysql group by 优化

来源:互联网 发布:java 手游辅助 编辑:程序博客网 时间:2024/06/05 16:45

发现一个很神奇的事情。本以为mysql select 查询单单只有 where order by 时会进行 索引触发 没想到group by 也可以利用到对应的索引


首先创建一个试坑表


居然调用到name 这个索引了


后来找到一个group by 原理文章有个哥们是这么写的

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。

       为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字。是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引、为该部分指定的条件,以及选择的累积函数。

       由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。

看看是不是所有的引擎都可以使用。我这边单单只是试了InnoDB,MyISAM



运行一下sql


MyISAM情况下这个玩意就玩不了


0 0
原创粉丝点击