前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >3层高的BTREE+ 能存多少条数据

3层高的BTREE+ 能存多少条数据

原创
作者头像
大大刺猬
发布2023-06-08 15:45:51
3240
发布2023-06-08 15:45:51
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

使用mysql的时候总是会避免大表, 因为大表读写慢, 慢的原因就是树太高了. 一般三层高就比较合适(太矮了存的数据有限.)

那么3层高能存多少数据呢.

通过之前的文章我们知道了ibd数据文件的物理格式. 那么我们就可以根据这个格式计算下3层高能存多少数据.

环境

代码语言:javascript
复制
page_size = 16384  #页大小
index_l = 12 #主键索引长度

col_size = 300  #行长度
cols = 16 #列数量(null bitmask 均按2B算)
null_bitmask = int(cols+7)/8 #记录空字段的
var_length = int(cols/3) #变量长度直接按照列的1/3算
rate = 0.75 #填充75%, 每页不是全部都填充数据, 还留了一部分出来. 
page_dir = 0.5 #每行按照0.5字节算 (懒得单独去算了)
page_no  = 4 #每页的编号. 使用的4字节记录的

计算

非叶子节点能记录的行数:

代码语言:javascript
复制
38+56+8 + no_leaf_rows*(var_length + 5 + index_l + 6 + 7 + page_no   + page_dir)/rate = page_size

no_leaf_rows = 309

所以, 非叶子节点每页能记录309条信息,(就是309page的地址). 按2层高就是 309**2 = 95481

叶子节点能记录的行数:

代码语言:javascript
复制
38+56+8 + leaf_rows*(var_length + 5 + index_l + 6 + 7 + col_size - index_l + page_dir)/rate = page_size

计算方式一样的, 只是把page_no换成真实的数据(记得去掉索引, 因为前面包含了索引的)

leaf_rows = 37 也就是叶子节点, 每页能存37条数据

算下来3层高能存 29503629 条数据

如果每行是100字节的话, 能存9357138条数据

如果是4层高(含叶子节点), 能存1091634273条数据.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 环境
  • 计算
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com