MySQL-数据大小预估

62 阅读2分钟

一、概述

项目在做设计的时候,通常有一个章节需要对数据库存储大小进行预估,包含每笔数据的存储大小、每一年的增长量以及五年后的存储大小。
每笔数据的大小,可以通过数据库表的设计进行估算。结合业务评估的每日业务笔数,计算出第一年需要的存储大小。再根据每年业务的增长量(通常也是由业务进行评估提供),依次算出后续5年每年所需要的存储大小。
基于以上的计算逻辑,技术方面最重要的就是评估每笔业务数据的存储大小。

二、MySQL字段类型

本次内容以MySQL为例来进行说明,其主要数据占用的存储如下:

1. 字符
  • char(n): UTF8编码最大长度是3n,UTF8MB4则是4n
  • varchar(n):UTF8编码最大长度是3n+2,UTF8MB4则是4n+2

MySQL5.0.3版本之后的字符长度定义的是字符的长度,而不是字节的长度。

varchar(n) 列显示的存储需要比实际字符要多 1 或者 2,这是因为 varchar 类型要用一个到两个字节来记录字节长度,如果 n < 255 时,用一个字节记录,n > 255 时,使用两个字节记录

2. 数值类型
  • TINYINT: 1字节
  • SMALLINT:2字节
  • MEDIUMINT:3字节
  • INT:4字节
  • BIGINT:8字节
3. 时间类型
  • DATE:3字节
  • TIMESTAMP:4字节
  • DATETIME:8字节
4. 浮点类型
  • FLOAT: 4字节
  • DOUBLE:8字节
  • DECIMAL(M,D): M+2字节

如上加粗字体是日常项目中常用的数据类型。

三、估算

新建如下表,进行估算。
image.png

根据字段类型可得出每行数据最大的字节约为

8+4*100+1+4*2+8 = 425 byte

加上数据库的一些额外开销,比如索引、内部的实现和配置,假设一个固定值进行估算,每条数据额外加上20字节。所以一条数据是

435+20=455 byte

假设一天的业务数据量为1w笔,那么一年的存储如下:

455*10000*365=1660750000字节,差不多是1583MB一年。

四、参考信息

参考资料: