Group by隐式排序,一个优美的BUG
你在使用MySQL的Group by分组时,是否发现分组后的数据都是有序的?其实,在MySQL8.0版本前,优化器在分组查询时都会进行隐式排序。那既然隐式排序为什么还要保留Order by?隐式排序的目的又是什么呢?让我们一起来看看。 一、背景小故事 年前我们换了领导。俗话说,新官上任干总爱干傻事儿,这不,领导要拥抱新事物,要求我们更新项目MySQL版本,从MySQL5.7更新到MySQL8.0。不知是MySQL5.7不香了,还是领导你眼光高了? 我把这个任务交给同事小王,小王不以为然,说换就换。迁完库,在代码基本不改的情况下自信上线。上线后却发现原本一些有序的列表变无序了,最后临时回退了版本。 核对代码时我们发现,老版本Select语句中只是用到了Group by分组,也没有用到order by排序,有点蒙,为啥没用order by却排了序?查资料后得知,在MySQL8.0版本前是存在Group by隐式排序的! 就是说在我们使用分组(Group by)时,如:select * from T group by appName; 会默认按照appName正序排序,相当...