Mysql(一)索引底层数据结构

1.索引是什么

索引是帮助MySQL高效获取数据的排好序数据结构

   计算机读取磁盘数据时,磁头读取文件需经过两个步骤:

  • 寻道时间(花费时间长)
  • 旋转时间(花费时间少)

索引可以减少读取磁盘的数据次数,从而快速读取数据。

索引存储在文件里索引为什么要用b+tree

1.二叉树的数据结构

存在极端情况,插入值按大小顺序差是,深度过深,需要进行多次I/O。当二叉树的值过多时如下图的情形发生时,深度过深。如查询值为8时,需要查询6次,故二叉树作为数据库的底层数据结构,存在局限性。

2.红黑数的数据结构

相比二叉树,红黑树在一些情况做自动平衡优化。存在极端情况,当数据量大时,如到达上百万时,深度也会很深,需要进行多次I/O。当二叉树的值过多时如下图的情形发生时,深度过深。如查询值为8时,需要查询6次,故二叉树作为数据库的底层数据结构,存在局限性。

3.hash的数据结构

使用hash的数据结构可以快速的读取到一条数据,但是不适用于范围查询。当范围查询较少时,可以使用hash作为索引方法。

实际运用hash作为索引方法的情况较少。

4.btree的数据结构

btree与红黑树相比,btree的可以增长节点的宽度,使其寻找数据时I/O减少。如下图当btree的度为3,当一个节点的内的数据size为3时,btree就会自动优化。

因为磁盘和内存之间的I/O的数据量是有限制的(页的整数倍,一页为16kb),所以btree节点内的度不是没有上限的。

5.b+tree的数据结构

mysql的数结构一般为b+tree,b+tree为btree的变种

非叶子节点不存储data,只存储key可以增大度

叶子节点不存储指针

顺序访问指针,提高区间访问的性能

B+Tree索引的性能分析

  • 一般使用磁盘I/O次数评价索引结构的优劣
  • 预读:磁盘一般会顺序向后读取一定长度的数据(页的整数倍)放入内存
  • 局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用
  • B+Tree节点的大小设为等于一个页,每次新建节点直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,就实现了一个节点的载入只需一次I/O
  • B+Tree的度d一般会超过100,因此h非常小(一般为35之间)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值