zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    ASA5505升级license
    Elasticsearch-URL查询实例解析
    awk和sed
    ftp无法上传问题
    linux使用storcli64查看硬盘信息
    Centos7中kubernetes-1.11.2基于配置亲和与反亲和
    Centos7使用kubeadm部署kubernetes-1.11.2
    内网映射3种方法
    centos6.5使用LVM
    centos7部署openstack-ocata
  • 原文地址:https://www.cnblogs.com/ssl-bl/p/13209169.html
Copyright © 2011-2022 走看看