阿里三面MySQL回表的性能伤害有多大?
1 回表的性能消耗
无论单列索引 or 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含: 索引里的字段值 主键值
即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个select *,那就还得其他字段,就需回表,根据主键到聚簇索引里找,聚簇索引的叶节点是数据页,找到数据页才能把一行数据所有字段值读出来。
所以类似 select * from table order by xx1,xx2,xx3
得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。
有时MySQL执行引擎可能认为,你要是类似 select * from table order by xx1,xx2,xx3
相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引,直接全表扫描得了,这样就只需扫描一个主键索引。
但若形如: select * from table order by xx1,xx2,xx3 limit 10
那执行引擎就知道你先扫描联合索引的索引树,拿到10条数据,接着对10条数据在聚簇索引里查找10次即可,那就还是会走联合索引。 2 覆盖索引
覆盖索引不是一种索引,只是一种基于索引查询的方式,即针对类似 select xx1,xx2,xx3 from table order by xx1,xx2,xx3
仅需联合索引里的几个字段的值,那就只需扫描联合索引的索引树,无需回表找其它字段,这种查询方式就是覆盖索引。
所以当你使用联合索引时,注意是否可能会导致大量回表到聚簇索引,若回表聚簇索引的次数太多,可能就直接给你做成全表扫描而不走联合索引了。
尽可能还是在SQL里指定你仅需要的字段,而不要暴力select *,最好直接走覆盖索引。
即使无可避免地要回表,你也尽可能用limit、 where限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。
没有英雄埃隆马斯克不在乎言论自由作者昌西罗宾逊翻译段跃初如果你想知道埃隆马斯克(ElonMusk)收购Twitter是否有利于民主,那就看看谁对此感到高兴吧。美联社这个星球上最富有的人之一埃隆马斯克声称他想要保护
苹果手机2022年05月01日新消息苹果手机苹果手机2022年05月01日新消息手机出货量大跌厂商心急如焚创新不够还是消费者没钱?如果苹果出了折叠屏你觉得会卖爆吗?介绍苹果手机买球软件详细攻略苹果这次稳了!iPhon
以大带小加快企业数字化作者曹钟雄工信部日前印发的工业互联网专项工作组2022年工作计划提出,鼓励大型企业打造符合中小企业特点的数字化平台。这表明,数字经济和实体经济深度融合通过数字化转型推动中小微企业实
元宇宙究竟是概念炒作,还是经济新增长点?近年来,全球数字化进程显著加速,作为与数字经济长期发展密切相关,且存在巨大想象力的产业,元宇宙可谓切切实实火了一把。随着Facebook微软等知名企业纷纷布局卡位,一时间,元宇宙成
华为WATCHGT3Pro全面解读高颜值兼具实用性,2488元起售255g的华为MateXs2陶瓷机身设计打造出智能手表颜值天花板的华为WATCHGT3Pro,刚刚过去的一晚,华为在终端业务上再次给业界上了一课哦,原来折叠屏手机也可以不打价格战不
Wifi6是不是真的很6?支持6的华为穿墙王实测说到WiFi,大家都知道,但加个6是什么意思呢?wifi6指的就是第六代无线网络技术,那为什么叫wifi6呢?以前啊,wifi联盟取名的时候没想那么多,命名太术语了,比如第四代是2
vivoX80Pro简直是旗舰之王其实我感觉vivo的手机真的不算贵,就看它这个性能方面,我觉得这个价格就很亲民了!所以这就是我为啥一直支持国产手机的原因了,国产手机里面有这么多个品牌,但我唯独喜欢vivo,那肯定
oppo,vivo,小米,荣耀次旗舰手机购买建议(3000价位)很多朋友购买手机的时候,比较理性,对一些非关键性功能,或者是说锦上添花的功能不是特别感冒,也乐于花更少的钱,去选择一些功能相对于旗舰手机,稍弱一点却,也有者良好性能,和体验的次旗舰
各大平台实行IP属地显示,民众无须担心!出来的都是牛鬼蛇神奇妙知识季各大平台全面实行IP属地显示,普通民众无须担心!,照出来的都是牛鬼蛇神!近日,今日头条抖音快手微博及小红书等各平台相继上线网络用户IP地址显示功能IP显示其实在IP诞生之
5月1日最新崩盘跑路和即将出事的问题平台1车秘DCM这是一个打着共享车位名义,实质就是一个卷轴类模式的资金盘,该项目是出了名的技术烂,三天两头的维护,在快崩盘的时候,操盘手还搞出个链改的车秘DCM,以链改的名义将上百万的
Ubuntu下安装dockerdocker安装官方提到三种方法设置Docker存储库,以便于安装和升级,这个也是最推荐的方法下载DEB包,并手动安装,完全手动管理升级,这个在离线状态下非常有用自动化脚本安装,一