【Mysql】 InnoDB引擎深入- 二级索引、联合索引、回表、索引覆盖

本文深入探讨了MySQL InnoDB引擎中的二级索引原理,解释了其叶子节点存储聚集索引键而非完整数据行的特点,以及如何通过索引覆盖和联合索引来优化查询性能。理解这些概念有助于减少回表操作,提高数据库查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接着上面文章内容对数据页的详细介绍以及聚集索引原理的了解【Mysql】 InnoDB引擎深入 - 数据页 | 聚集索引,有了这个知识前提,对了解二级索引、联合索引等相关内容的理解就变得非常简单了。

二级索引(又名辅助索引、普通索引、非聚集索引),叶子节点不包含行记录的全部数据。叶子节点除了键值(索引建)之外,每个叶子节点中还包含了一个书签,该书签就是用来告诉引擎哪里可以找到该条记录的所有行数据,在InnoDB中该书签就是聚集索引建一般来说也就是聚集索键。

        通俗来说,二级索引跟聚集索引有着一样的树结构,根据索引建顺序构建索引树(如果是字符性字段会根据不同的字符集运算后进行排序,所以字符集不一致的字段或表,可能会导致索引失效),不同的是其叶子节点不包括行记录所有数据,只有定义的索引键以及聚集索引键(通常就是主键),目的就是通过二级索引树查询时,首先查到的并不是行数据,而是该行的聚集索引建,然后通过该聚集索引键通过 聚集索引树 查找行数据。

                                

 

回表:像上述描述的当一个sql查询时,需要两个索引树进行查找时,这样的过程被称为回表。所以中尽量减少回表过程也是一种优化手段。

索引覆盖(覆盖索引):那为了减少回表过程,可以进行索引覆盖,也就是说只通过一个索引树就能拿到需要的数据。比如 select * 修改为 select aa 而 aa就是二级索引,这样就可以直接在二级索引叶子中拿到需要的字段,从而不需要再次进行回表操作,那这样的情况为称为索引覆盖,或者叫覆盖索引。

联合索引: 联合索引也属于二级索引,只是它可以定义多个键组合使用,也就是对表上多个列进行索引。主要注意的是:因为索引需要根据顺序来完成索引树的建立,所以多个字段必须按照从左到右的顺序进行排序,这也就是常说的最左前准原则

​ 比如: 1-1-1 (A,B,C 三个字段)

​ 1-2-2

​ 2-3-2

​ 这样的字段三个字段的组合,必须现根据A排序后,才能对B进行排序,A,B都确定顺序后才能对C进行排序。因此在使用联合索引时一定要遵循最左前缀原则,比如 where A = * 、where A = * AND B = * 可以使用索引,但是 where B = * .... 是会索引失效,因为在没有确定A的情况下,B也是无须的,而索引原理就是通过顺序进行树的查询。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Survivor001

你可以相信我,如果你愿意的话

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值