提示: InnoDB每页大小为16K,可通过 show GLOBAL VARIABLES like '%innodb_page%' 查看

upload successful

假设:
每行记录大小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