数据库
首页 > 数据库> > mysql索引

mysql索引

作者:互联网

1.mysql索引结构b+树

a.首先要说二叉树,二叉查找树,数的结构不用多说,二叉查找树,大概就是几个原则,左边比右边的小,然后保持一个分布均匀,也就是树的高度尽量最小。

b.b-树,b-树和二叉查找树结构类似,但是每个节(页)点会有多个数据,

c.b+树和b-树最大的区别就是,只有叶子节点存数据。为啥,为了非叶子节点能够存储更多的索引,以便控制树的高度,树的高度决定了io次数,io是非常消耗性能的。

下图b-树

 

下图b+树

 

 一般在数据库系统或文件系统中使用的B+Tree结构都在经典B+Tree的基础上进行了优化,增加了顺序访问指针。范围查找的时候等非常有用。

 

2.1000万数据的存储结构

在 MySQL 中我们的 InnoDB 页的大小默认是 16k,为16384

 

 上图只是一个类似图,实际上根节点往往不止这点数据。

一上图2的高度来计算,假设前提是每页装满来算

结论1:根节点能存1170个指针(大概)

一页为16k(16384),我们假设主键 ID 为 bigint 类型,长度为 8 字节,而指针大小在 InnoDB 源码中设置为 6 字节,这样一共 14 字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即 16384/14=1170

结论2:一个叶子节点放16行数据

 一页为16k,一行用1k来算的行就是16行。

结论3:高度为2的树数据为16*1170

 根有1170个指针,一个指针指向一个页,一页有16条数据。

结论4:如果高度为3

1170*1170*13 大概2000w,第一层1170个指针,第二次每个也1170个指针,第三层叶子节点,每页为16行。

 

标签:16,1170,高度,索引,查找,mysql,节点,指针
来源: https://www.cnblogs.com/longsanshi/p/14468425.html