使用mysql的时候总是会避免大表, 因为大表读写慢, 慢的原因就是树太高了. 一般三层高就比较合适(太矮了存的数据有限.)
那么3层高能存多少数据呢.
通过之前的文章我们知道了ibd数据文件的物理格式. 那么我们就可以根据这个格式计算下3层高能存多少数据.
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字节记录的
非叶子节点能记录的行数:
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
叶子节点能记录的行数:
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 删除。