mysql估算存储数据量

  我们上学的时候,学校会将学生按年级分开,年级又按照班级分开,班级可能又按照组分开。学校为什么要这样做呢?答案很明显,方便组织管理。不同的事情,需要不同的组织形式:班级里收集作业可以以小组为单位;年级内组织活动可以以班级为单位;学校里组织考试可以以年级为单位。在面对相同属性的事物时,通过组织分类可以极大地方便管理工作。同理,计算机中的数据都是以二进制形式存储,为了更好地组织数据,磁盘以扇区(512B)为最小存储单位,文件系统(多种文件系统不同)又以块(4KB)为读写数据的最小单位,内存以页(4KB)为数据的最小存储单位。mysql中也有页的概念,并且其大小是16KB.页是innodb磁盘管理的最小单位。
  mysql是以B+树的数据结构存储数据的。B+树只有叶子节点存储具体数据,非叶子节点只存储索引。比如我们一行数据的大小为1KB,则1页可以存储16条数据。索引列使用bigint类型(8B)再加上索引的其它信息,估算为20B。mysql的第一层存储索引,161024/20=819.则第一层可以存储819个索引,第二层可以存储819819=670761个索引。第三层存储数据,则可以存储67076116=10732176条数据。
  mysql的第一层是只有一页,第二层有819页,第三层有670761页。这样我们查找一条数据,最坏的情况也只需要读3次磁盘。
  其实索引并不占多少空间,主要还是数据占空间。上例的索引占空间为(1+819)
16KB=13MB.数据占空间为670761*16KB=10G.

原文地址:https://www.cnblogs.com/ssl-bl/p/13209169.html