我们mysql底层的索引存储数据结构是按照B+树方式来存储的,也是从B树结构演变而来。

我们知道索引就是类似我们的书本的目录页,存储要找的内容所在的页数。
mysql的索引存储数据结构
B树的结构:
叶节点具有相同的深度,叶节点的指针为空
所有索引元素不重复
节点中的数据索引从左到右递增排列

mysql的索引存储数据结构

B+树的结构:
非叶子节点不存储data,只存储索引(冗余),可以放更多的索引
叶子节点包含所有索引字段
叶子节点用指针连接,提高区间访问的性能
mysql的索引存储数据结构

另一个点就是说,我们的数据存储在磁盘文件不一定连续的,可能是分散的存在不连续的文件地址。因此B+树的做法是在磁盘上划分一块小的空间存放很多的索引,这个叫索引页也叫非叶子节点,默认大小为16kb,结构是索引和下一个索引页的文件地址,比如我们建索引的字段类型为bigint8个字节,文件地址占6个字节,那么这个索引页可以存储16kb/14b=1170个索引,假设我们叶子节点存储的一个索引的数据大小为1kb(所有字段大小),那么每个叶子节点可以存16个索引的数据,假设树的高度为2,那么可以存储的记录数就是1170x1170x16=2千万条数据左右,而且只需要做2次磁盘oi即可找到对应的数据。如果我们用
B树存储2千万数据,索引树的高度会是多少呢?

B树的数据是和索引存放在节点上面的,那么2千万的数据,需要树的高度至少大于6,要做6次磁盘io,而且读取文件到内存也占用空间比较大。

相关文章:

  • 2022-12-23
  • 2022-02-11
  • 2022-01-07
  • 2021-11-20
  • 2021-11-20
  • 2021-05-11
  • 2021-06-06
猜你喜欢
  • 2021-12-27
  • 2022-12-23
  • 2021-06-16
  • 2021-12-29
  • 2021-07-07
  • 2021-05-26
  • 2021-11-27
相关资源
相似解决方案