zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL索引&锁

2023-09-27 14:24:03 时间

 

 

 

 

   

 

 

在InnoDB中一个3层B+树最多大概可以存放多少行数数据?
参考:https://www.pianshen.com/article/43511636667/
https://zhuanlan.zhihu.com/p/86137284

在innodb存储引擎里面,最小的存储单元是页(page),一个页的大小是16KB。(show varilables like 'innodb_page_size' )
假设一条数据占用 1K 大小的话,那么一页可以存储 16 条数据。
根据 B+ 树的特性,叶子节点才存储数据,非叶子节点只存在“页指针 + 键值”,假设主键ID为bigint类型,长度为8字节(byte),而指针大小在InnoDB源码中设置为6字节(byte),所以一页 16KB 可以存储 16*1024/(8+6) = 1170,那么一个 3层的 B+ 树就可以存储 1170*1170*16 = 21902400,约 2200 万条数据。
而每经过一个节点都需要IO一次,把这个页数据从磁盘读取到缓存,也就是说读取一个数据只需要三次IO。

那如果走辅助索引的话,就需要 6 次 IO ?走辅助索引拿到主键索引的值,再遍历一遍主键索引的 B+ 树,拿到真正的数据