Innodb索引的实现

本文详细介绍了Innodb索引的实现机制,包括B+树的存储结构,聚簇索引与普通索引的区别,以及页分裂策略。通过对数据插入过程的解析,阐述了索引如何提升查询效率并降低无效数据读取。
摘要由CSDN通过智能技术生成

  正如我们所知,在计算机上运行一个任务,影响其性能的主要因素包括内存的大小,cpu以及磁盘的速度。而对于索引来说,它是一种数据的存储方式,而与它相关的就是磁盘的读取速度了。对于磁盘来说,顺序的读取肯定比随机的读取数据要快。即便数据的物理存储是没顺序的,但是索引是有顺序的。我们可以通过索引的顺序查找,来找到对应的物理数据页。另外,我们读取数据的时候,尽量读取有效数据,减少无效数据的读取。例如对于一行有十条记录的表,我们只需要读出其中某列或者某几列的数据,那么我们就可以只在我们需要的列上建立索引,只读取我们需要的有效数据而不需要每次都读出所有列的数据。因此,Innodb的索引采用了B+树的存储结构来管理。其特点:

①  叶子节点存储所有的数据,内节点只存储键值;

② 由于键值既在叶子节点上也在内节点上,需要一定的存储空间,空间换性能;

③ 查询的复杂度和B+树的层数有关,层数越少,性能越好;

④ 层数和每个数据页储存多少条数据有关,也就是和key_length有关。所以B+树不适合存储长的索引列。

 

Innodb索引分为聚簇索引(clustered index)和普通索引(secondary index):

聚簇索引:每张表必须有且只有一个聚簇索引来存放所有的数据。它的叶子节点存放了整张表的所有数据行。聚簇索引第一会选择我们建表时明确定义的主键列;如果没定义主键列,第二会选择第一个非空的唯一索引列;如果前二者都没有,Innodb会选择隐藏的Rowid(实例级别,6byte)做为聚簇索引。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值