当前位置: 首页 > news >正文

你知道mysql的索引下推么?

在此之前,需要先明白mysql内部的一个大致结构,mysql内部大概是划分为3处,client客户端连接,server层,存储引擎层

索引下推是mysql5.6之后内部的一种索引优化手段。

比如现在我有一张表student表,字段有id,name,age,note等等字段,然后我现在对name和age建立了一个组合索引,然后我现在执行一条语句:

select * from student where name like '周%' and age > 25;

我们知道此时这个组合索引是一个辅助索引树结构,说到辅助索引肯定就联想到回表,但是辅助索引会不会回表,取决于是否是覆盖索引。很明显,现在是*,查询所有字段,不是覆盖索引,那么就一定会回表,那么在mysql5.6,没有索引下推的时候,是以下这样执行的:

 尽管建立了联合索引,但是Mysql5.6之前在储存引擎层的时候,还是只会通过辅助索引树的叶子结点找到name是为姓周的,而age是不管的(Mysql5.6的时候会管),然后再通过叶子结点上索引对应的主键ID回表主键索引树,找到主键对应的行记录,然后再把周的那些行记录返回给Mysql的Server层,Mysql服务层再此层再筛选出age大于25的行记录,再把结果返回给客户端。那么此时如果姓周的结果是有100人,那么此时就需要回表100次,然后Mysql服务层再筛选出符合age > 25的记录给客户端。那么能不能就一次性在辅助索引树上就把姓周并且age> 25的筛选出来,那么这样的话就可以只回表一次,然后直接将最终结果返回给Mysql的Server层既可。这样就可以大大减少回表次数了。

所以在Mysql5.6之后,Mysql内部对此进行了优化也就是索引下推

由于建立了联合索引,那么通过辅助索引树的叶子节点找到name是姓周的,同时会把age > 25的也筛选出来,然后最终满足的记录比如是2条,再回表2次查询主键索引树,然后把2条结果返回给Mysql的Server层,Mysql的Server层再直接把数据返回给客户端大大减少了回表次数。

没有使用索引下推,回表次数多,Mysql的Server层需要筛选记录。

使用索引下推,回表次数少,Mysql的Server层不需要筛选记录,直接返回给客户端。

总结:

        索引下推是Mysql5.6之前在数据库内部为了减少回表次数而优化的一个点。

相关文章:

  • Doris高性能读能力与实时性实现原理
  • 【优秀三方库研读】在 quill 开源库中 QUILL_MAGIC_SEPARATOR 的作用是什么,解决了什么问题
  • 【Java】封装在 Java 中是怎样实现的?
  • 基于springboot的网上学校超市商城系统【附源码】
  • [Vue]组件介绍和父子组件间传值
  • 广东省省考备考(第十五天5.20)—言语(第六节课)
  • MySQL基础关键_014_MySQL 练习题
  • 阿里云百炼(1) : 阿里云百炼应用问答_回答图片问题_方案1_提问时上传图片文件
  • 北斗导航 | 基于matlab的多波束技术的卫星通信系统性能仿真
  • 实战:基于Pangolin Scrape API,如何高效稳定采集亚马逊BSR数据并破解反爬虫?
  • Python数据可视化再探——Matplotlib模块 之二
  • 计算机视觉与深度学习 | Matlab实现EMD-GWO-SVR、EMD-SVR、GWO-SVR、SVR时间序列预测(完整源码和数据)
  • 分布式ID生成器:原理、对比与WorkerID实战
  • 【PTA】 520 钻石争霸赛 2025
  • 基于springboot的个人博客系统【附源码】
  • 多通道振弦式数据采集仪MCU安装指南
  • 蓝桥杯5130 健身
  • go.mod:5: unknown directive: toolchain
  • MySQL--day4--排序与分页
  • Unity 喷烟喷气特效:喷快消失慢
  • 白鲨抢下世界杯首张入场券,透过ACL看CFPL的成色
  • 夜读丨永不掉电的陪伴
  • 上海乐高乐园客流预测来了:工作日0.8万人次/日,周末节假日2万人次/日
  • 世卫大会连续9年拒绝涉台提案
  • 《缶翁的世界》首发:看吴昌硕王一亭等湖州籍书画家的影响
  • AG600“鲲龙”批生产首架机完成生产试飞