前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL索引优化order by与group by

MySQL索引优化order by与group by

作者头像
晓果冻
发布2022-09-08 12:39:00
5980
发布2022-09-08 12:39:00
举报
文章被收录于专栏:一直在努力的Java菜鸡er

MySQL索引优化order bygroup by

案例一

代码语言:javascript
复制
name符合最左前缀法则,但在age处断了,所以只能用到name列,索引长度202,order by也用到了index_union索引
树,通过Extra可看出。

案例二

代码语言:javascript
复制
where后符合最左前缀,所以只用到了name列,而order by处不是用的索引树index_union,因为age还没排序呢,
position排序肯定是乱的,需要将结果集放在内存中排序。

案例三

代码语言:javascript
复制
如第二张图所示,在确定最左列name后,其实下面也按age和position分别也是排好序的。

案例四

代码语言:javascript
复制
由案例三中的第二张图可知,最左列name确定后,其实是按age,position排序的,但是想要position、age的方式
排序的话,需要将age,position加载到内存中再冲洗排序,通过Extra字段就可以看出来。

案例五

代码语言:javascript
复制
age其实已经明确是15了,一个常量值,相当于 order by position。在案例三中第二张图就相当于明确了name是
王五,age=1的结果集,很明显接下来的position也是排好序的。

案例六

代码语言:javascript
复制
在案例三中第二张图中,age和position只能是相同顺序的,才能利用到B+树的特性,直接得出,否则还需文件排序

案例七

代码语言:javascript
复制
看第一个图,很懵,即用了索引本身的排序,又用了文件排序,再看第二张图对比下就可知,索引树是给where用的,
而order by其实就是文件排序,如图三,in中的这三个name虽然是排好序的,但age和position并不是已经排好序的。

案例八

代码语言:javascript
复制
遇到必须要用大于小于这种情况,可以使用索引覆盖来优化他,注意Extra中的信息,using where 对应的是where条件,
using index对应的是name > 'AAA',因为select的数据都在本索引树上,如果是*肯定不会有using index了,最后
就是order by的文件排序了。
总结
  1. 总计俩种排序方式:index,filesort。using index效率高,using filesort效率低,using index利用了索引树本身的排序特性。
  2. order by和where都需遵循最左前缀原则,类似盖楼房的情景,没有一楼,不可能直接盖三楼的。
  3. 利用索引覆盖减少回表
  4. group by本质就是先排序后分组,遵循最左前缀法则。如果分组不需要排序可以加上order by null禁止排序。
  5. where高于having,能卸载where中的限定条件就不要在having中限定。
代码语言:javascript
复制
单路排序:将所有需要查询的字段放在内存中排序,而双路只会把主键和需要排序的字段
放到内存中排序,最后通过主键id回表查询select所需的字段。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL索引优化order by与group by
    • 总结
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档