mysql-B+tree索引InnoDB

B+树基本介绍(balance平衡-高度差小于2)

B+树是B树的扩展,允许有效的插入,删除和搜索操作。

在B树中,键和记录都可以存储在内部节点和叶子节点中。 然而,在B+树中,记录(数据)只能存储在叶节点上,而内部节点只能存储键值。

B+树的叶节点以单链表的形式链接在一起,以使搜索查询更有效。

B+树用于存储无法存储在主存储器中的大量数据。 由于主存储器的大小总是有限的事实,B+树的内部节点(访问记录的键)存储在主存储器中,而叶节点存储在辅助存储器中。

B+树的内部节点通常称为索引节点

mysql-B+tree索引InnoDB_第1张图片

有子节点的是内部节点,没有子节点的是叶子节点

磁盘存储和innodb关系介绍

系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么

InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K

而系统一个磁盘块的存储空间往往没有这么大,因此InnoDB每次申请磁盘空间时都会是若干地址连续磁盘块来达到页的大小16KB。InnoDB在把磁盘数据读入到内存时会以页为基本单位,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,这将会减少磁盘I/O次数,提高查询效率

B+tree详细介绍

  1. 非叶子节点只存储键值信息;

  1. 所有叶子节点之间都有一个链指针,这样能够提升范围查询的效率;

  1. 数据记录都存放在叶子节点中;

  1. 所有叶子节点(即数据节点)之间是一种单链表结构。因此可以对B+Tree进行两种查找运算:一种是对于主键的范围查找和分页查找,另一种是从根节点开始,进行随机查

mysql-B+tree索引InnoDB_第2张图片
mysql-B+tree索引InnoDB_第3张图片

B树与B+树比较

mysql-B+tree索引InnoDB_第4张图片

INNODB

InnoDB使用了聚簇索引(Clustered),即所有二级索引聚集在主键索引上,对InnoDB存储引擎表的任何访问,最终一定要搜索主键索引树

在InnoDB中,二级索引上没有实际的数据,存储的是主键索引的值。这样的话,如果是基于二级索引的查询,会先在二级索引上搜索得到主键索引的值,然后再去主键索引树上搜索,得到最终的行数据。

这就意味着,至少有一次索引查找,可能会有两次索引查找,其中一定有一次主键索引查找

在InnoDB中,主键要设计的尽量主键越小二级索引也会越小

如果主键用更大的数据类型,由于二级索引上有主键索引的值,那么不只是主键索引树变的更大更高,其他的二级索引树也会更大更高

二级索引:所有不是主键索引的索引

树高度决定因素

阶树:描述一颗 B 树时需要指定它的阶数,阶数表示了一个节点最多有多少个孩子节点,一般用字母 m 表示阶数,阶树也决定了树的高度

根节点的关键字数量范围:1 <= k <= m-1,非根节点的关键字数量范围:m//2 <= k <= m-1,超出范围就会分裂新的内部节点。

树高度越小,查询io操作就会越少,读写也就越快

你可能感兴趣的:(mysql)