MySQL Innodb存储引擎:索引

本文深入解析了InnoDB存储引擎中的B+树索引原理,包括其结构、聚集索引与辅助索引的区别,以及索引创建的最佳实践。探讨了B+树如何提高数据检索效率,解释了联合索引、覆盖索引的概念,并分析了优化器在不同情况下的索引选择策略。

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

1,Innodb存储引擎索引的使用的B+树索引本身并不能找到具体的一条记录,能找到只是该记录所在的页。然后数据库通过把页读入到内存,再在内存中进行查找,最后得到要查找的数据。

B+树的叶子节点是数据页。页中有多条记录。

2、B+树特点:所有记录节点都是按键值的大小顺序存放在同一层的叶子节点,由各叶子节点指针进行连接。

3、B+树索引分为聚集索引和辅助索引,两者不同的是,叶子节点存放的是否是真实信息数据。

    聚集索引就是按照每张表的主键构造成一棵B+树,同时叶子节点中存放的即为整张表的行记录数据,聚集索引的叶子节点也称为数据页。这就是为什么一张表只能有一个聚集索引。数据页之间用双向链表连接。聚集索引在并不是物理存储连续的。

    辅助索引(非聚集索引)叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,还包含对应行数据的聚集索引键。当通过辅助索引来查找数据时,存储引擎会遍历辅助索引并通过叶子指针获得指向聚集索引的主键值,通过主键索引来找到一个完整的行信息。因为多个辅助索引不会影响数据在聚集索引上的组织,每张表上可以有多个辅助索引。

4、什么情况下添加索引?对于某个字段取值范围比较大,选择性大时,加索引有意义。

5、其他几种索引类型

    联合索引:表上多个列进行索引。联合索引也是一颗B+树,不一样的是联合索引的键值的数量大于1.

对于联合索引(a,b),where a =xxx and b =xxx,和where a=xxx 可以使用此联合索引,但是对于where b = xxx不能使用,因为b列数据在此联合索引上不是有序的。

    覆盖索引:即可以从辅助索引中查到记录,则没有必要再查找聚集索引中的记录。好处是辅助索引远小于聚集索引的大小,查找较快。

6、优化器选择不使用索引的情况:如果要访问的数据量蛮大时(大于20%),如果某列即时有辅助索引,也不会使用,而是直接使用聚集索引(即全表扫描),因为顺序读远大于离散读。

 

参考:

姜承尧《MySQL技术内幕:InnoDB存储引擎》

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值