mysql中group by实现原理是什么


   
  CREATE TABLE `tb` (
  
`c` INT(11) DEFAULT NULL,
`d` INT(4) DEFAULT NULL,
`e` VARCHAR(1000) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO tb VALUES(2,20,'b');
INSERT INTO tb VALUES(1,10,'a');
INSERT INTO tb VALUES(2,20,'b');
INSERT INTO tb VALUES(1,10,'a');
INSERT INTO tb VALUES(3,30,'c');
EXPLAIN SELECT c,COUNT(*) FROM tb GROUP BY c

请输入图片描述
在这个语句的explain结果中有Using temporary; Using filesort,需要用到排序。
难道group by的实现,是“先排序,后分组”,还是什么样子的?

mysql

西瓦的守护 11 years, 8 months ago

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

Dylan-Z answered 11 years, 8 months ago

Your Answer