MySQL——InnoDB索引高度求解过程
提示: InnoDB每页大小为16K,可通过
show GLOBAL VARIABLES like '%innodb_page%'
查看
假设:
每行记录大小1K,InnoDB指针占用6B,主键为bigint占用8B
求解过程:
每页大小:
16K*1024 = 16384
B
每页存储非叶子节点数:每页大小/指针+主键占用
16384/(6+8) = 1170
个
每页可存储叶子节点数:每页大小/每行记录大小
16K/1K = 16
个
高度为2的可存储行数:非叶子节点个数(也就是高度1可存储数量)*每页可存储叶子节点数
1170*16 = 18736
个
高度为3的可存储行数: 非叶子节点个数(也就是高度1,2可存储数量)*每页可存储叶子节点数,这也是为什么建议当数据超过2千万条建议分表的原因
1170*1170*16 = 21902400
个
总结:
以上可以得出如果想知道一个数有多高,那么必须要知道每行记录的大小,假设还是每行记录大小为1K,那么一页就是16行,总行数C,那么反推公式就是
H=log1170(C/16)
H==整数?H:H+1
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rick's Blog!
评论