如何计算一颗B+树索引的空间占用

B+树索引结构图

上图是B +树聚簇索引的结构图:

  1. B+树是一个棵二叉查找平衡树
  2. 图中每一个黄色块是一个数据页,磁盘和内存的交互是以数据页为最小单位
  3. 整颗树只有两层,叶子节点层中数据页通过双向链表连接且保持有序;非叶子节点页中数据以索引序号和指针交替排序
  4. 叶子节点中不仅包含索引序号还包含数据本身

创建如下表user

  • id字段用bigint 占用8个字节
  • name字段用VARCHAR(32) ,假设每个name都填满且都是英文字母,共占用32个字节

UTF-8:UTF-8一个(字符)占用(3)个字节,英文占用(1)个字节 

其它条件

  1. 操作系统是32位的系统,也就是说一个指针的地址是4字节
  2. 一个数据页的大小是16KB
  3. 数据页的空间占满,其实这个是可以通过参数调整的,这里假设占满

问题:如果在user表中存1000万数据,整颗树的空间占用是多少?

  1. 非叶子节点页,一页16KB,一个元素占用8+4=12字节,一页有 16*1024/12 约等于 1360个元素
  2. 如果非叶子节点有2层能达到 1360 *1360=184,9600个元素,如果非叶子节点3层超过1000万个元素了,因此非叶子节点只需2层
  3. 叶子节点1000万个元素,如果每页占满有 (1024*16-4-4)/(8+32)=409个元素,1000w/409 = 24450 页
  4. 第一层1个节点 1页 16KB
  5. 第二层1360节点  1360*16KB
  6. 第三层 24450节点 24450*16KB
  7. 总共约占用空间  425M

注意:实际空间计算远远不只这些,比如一个数据页可能是占不满的,因为有空洞;还有就是其它功能占用的空间没有算进去;这里只是为了通过这个例子理解B+ 树的特点

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值