INNODB索引实现原理

本文深入探讨了InnoDB存储引擎的索引实现原理,主要围绕B+树展开,包括B+树的特点、索引设计考虑的因素、聚簇索引与二级索引的差异以及页分裂优化策略。通过理解这些原理,有助于优化数据库性能。
摘要由CSDN通过智能技术生成

一、B+树

  B+树属于索引的基础,不在详细介绍插入删除过程。只介绍特点。

1 、搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构。

2、 B树(m阶):一棵m阶B树是一棵平衡的m路搜索树。

  • 每个节点之多拥有m棵子树;
  • 根结点至少拥有两颗子树(存在子树的情况下);
  • 除了根结点以外,其余每个分支结点至少拥有 m/2 棵子树;
  • 所有的叶结点都在同一层上;
  • 有 k 棵子树的分支结点则存在 k-1 个关键码,关键码按照递增次序进行排列;
  • 关键字数量需要满足ceil(m/2)-1 <= n <= m-1;

特点:

  1. 关键字集合分布在整颗树中;
  2. 任何一个关键字出现且只出现在一个节点中;
  3. 每个节点存储data和key;
  4. 搜索有可能在非叶子节点结束;
  5. 一个节点中的key从左到右非递减排列;
  6. 所有叶节点具有相同的深度,等于树高h。

3 .B+树

  • 根结点只有一个,分支数量范围为[2,m]
  • 分支结点,每个结点包含分支数范围为[ceil(m/2), m];
  • 分支结点的关键字数量等于其子分支的数量减一,关键字的数量范围为[ceil(m/2)-1, m-1],关键字顺序递增;
  • 所有叶子结点都在同一层;

特点:

  1. 所有关键字都存储在叶子节上,且链表中的关键字是有序的;
  2. 不可能非叶子节点命中返回;
  3. 非叶子节点相当于叶子节点的索引,叶子节点相当于是存储(关键字)数据的数据层 带顺序访问指针的B+树提高了区间查找能力

B+树与B树区别:

  1. B+非叶子节点不存储data,只存储key
  2. 所有的关键字全部存储在叶子节点上
  3. 每个叶子节点含有一个指向相邻叶子节点的指针
  4. 非叶子节点可以看成索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字

二、索引的设计

   数据库作为存取数据的工具,对应性能影响主要有三块

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值