MySQL存储引擎InnoDB索引详解

 InnoDB 引擎都是使用 B+Tree 作为索引结构

(图片来自JavaGuide)

为何使用B+树而不是B树,或者说为什么B+树有什么优点呢?

  • B 树的所有节点既存放键(key) 也存放数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。
  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
  • 在 B 树中进行范围查询时,首先找到要查找的下限,然后对 B 树进行中序遍历,直到找到查找的上限;而 B+树的范围查询,只需要对链表进行遍历即可。

综上,B+树与 B 树相比,具备更少的 IO 次数、更稳定的查询效率和更适于范围查询这些优势。

索引是InnoDB中非常重要的组成部分,可以提高查询的速度和效率。

  1. 聚集索引(Clustered Index):在InnoDB中,表的主键是聚集索引,也就是说数据实际上是按照主键的顺序存储的。主键索引的优点是能够快速地定位到指定的记录,但缺点是插入新记录时可能引起页面的拆分和重新整理。

  2. 辅助索引(Secondary Index):除了聚集索引外,InnoDB还支持辅助索引。辅助索引是基于非主键列的索引,能够快速地定位到指定的记录,并通过访问聚集索引来获取其他列的值。辅助索引的优点是可以减少聚集索引的大小,但查询时需要进行两次查找。

  3. 自增主键(Auto-Increment):InnoDB支持自增主键,当插入一条新记录时,如果没有指定主键的值,InnoDB会自动为该记录分配一个唯一的主键值。

  4. 覆盖索引(Covering Index):在辅助索引上包含了所有查询需要的列时,可以使用覆盖索引。覆盖索引可以减少对聚集索引的访问,提高查询的性能。

  5. 唯一索引(Unique Index):InnoDB支持唯一索引,保证索引列的值在整个表中是唯一的。

  6. 外键(Foreign Key):InnoDB支持外键,可以在表与表之间建立关联关系。外键可以保证数据的完整性和一致性,但也会对性能产生一定的影响。

总的来说,InnoDB索引的设计和使用需要根据实际的业务需求和查询模式进行优化。合理的索引设计能够提高查询的性能,减少磁盘IO,但不当的索引使用可能会导致性能下降。因此,需要根据具体情况来选择合适的索引策略。

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值