Skip to main content

数据库引擎

MarshioAbout 2 minMySQL

MyISAM

InnoDB

可以存多少数据

想要知道这个,我们就需要知道

  • 计算机中,磁盘存储数据的最小单元是扇区,一个扇区占512字节。
  • 文件系统中,最小单位是块,一个块大小就是4K。
  • InnoDB存储引擎最小存储单元是页,一页大小是4块,即16K。所以InnoDB读取一次将会读取16K的内容。
image
image

生产环境中,B+树得高度在3-4层,叶子节点在最后一层,则有2-3层为索引层。

再结合B+树中,叶子节点存储数据,非叶子节点存储键值-指针,即索引-指针(注意这里考虑的是主键索引,因为只有主键索引的B+树才会存储数据)。

假设索引为ID,long类型(8字节),指针在InnoDB中一个指针大小为8字节(实际上是6字节),所以在非叶子节点中一条数据就是8+8=16字节。那么总共能存储的数据条数为:

第一层存储的索引节点 x 第二层存储的索引节点 x 第三层存储的索引节点,即

[(161024)/16][(161024)/16]=1048576[(16*1024) / 16] * [(16*1024)/16] = 1048576

[(161024)/16][(161024)/16][(161024)/16]=1073741824[(16*1024) / 16] * [(16*1024) / 16] * [(16*1024) / 16] = 1073741824

假设每条数据占1K字节,那么一个叶子节点可以存16K/1K = 16条数据

所以能存放的数据量为:1048567 * 16 = 16777216 条数据,即三层就能实现千万级(16G)存储。

当然这里也需要说明一下,这是因为主键声明的较小,如果主键索引数据量*10,那么级别就会降低为十万级。