首页 > 数据库技术 > 详细

MySQL优化之group by

时间:2015-06-16 02:04:39      阅读:209      评论:0      收藏:0      [点我收藏+]

?

group by原理:先做order by操作,然后进行分组。

?

group by有三种实现形式,松散索引扫描,紧凑索引扫描和完全无法使用索引。

?

松散索引扫描?

?

松散索引扫描的松散的意思其实就是不用扫描所有满足条件的索引,每组索引可能有多个,但是只需要扫描每组的第一个或者最后一个即可。

?

比如:有这样一个索引IDX_ID_NAME_ADDR

select max(addr) from table where id < 10 ?group id,name ,比如说id = 5 name = ‘test’的数据有十条算这组最大值的时候不用把10条全部取出来,都是本身索引就是有顺序的,所以只要选择最后一条数据即可。

?

这个名词的意思很容易忘记它的含义,而且看官方手册的时候新人很难看懂说的是啥。

只有明白了原理再去看官方手册,觉得奥原来是这样。

不过有个特点就是执行计划的extra里面显示的是:using index for group-by

?

松散索引的前提:

1.group by条件的字段必须在同一个索引中最前面的连续位置

2.在使用group by的同时,只能使用max和min这两个聚合函数

3.如果引用了该索引中group by条件之外的字段的时候,必须以常量的条件存在。

?

紧凑索引扫描:

?

紧凑索引扫描和上面不同,它需要读取该组内所有满足条件的索引。

比如group by id 如果id = 5 有十条索引满足,则十条全部读取出来。

?

紧凑索引扫描前提:

group by的字段不连续或者不是索引前缀,但是空缺的地方用常量来填充。

?

完全无法使用索引:

特点执行计划之中 extra:using temporary;using filesort

?

?

MySQL优化之group by

原文:http://labreeze.iteye.com/blog/2219900

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!