group by 基于临时表和基于B+树的数据结构形式

前提:在MYSQL 8 以及之后,group by 不会再进行order by 了,所以如果我们不需要排序,那么无须再进行order by null 。

group by 详解:

   如果有索引,那么就会走索引,如果没有索引那么会走全表扫描,此时会有个临时表。

   走临时表的情况:

                           取出每一条数据,然后对age做一个唯一索引,每次取出的数据都与updateTime进行对比,如果比它大,那么就会替换到旧值。

   走索引的情况:

                          因为索引本身就是根据age来排序的,这个时候无须建立临时表,只需要在server层进行判断updateTime的大小即可。

所以说group by必须对分组的数据进行聚合运算。

一. 首先我们上数据表

   然后我们上SQL,这个SQL是有带索引的。(age)

很明显,他是根据age的b+树来进行排序的。 

1.首先是基于临时表的group by 

     如果没有走索引的话,那么会有个临时表, 那么是根据主键的顺序的排序的

 

这种情况是没有走索引的, 直接走主键索引,那么就会创建临时表,和上面描述的情况一样。 

        

   2.基于B+树的数据结构形式,排列出来的顺序是不一致的

这种情况是第一张图的情况,这种情况是走索引的

总结:如果创建临时表(相当于数组,按照进入的顺序),如果是走的B+树,那么此时就是主键的顺序。如果是走索引,这时候的顺序就是分组的顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值