【问题标题】:MySQL record disk-usage calculation | Am I right?MySQL记录磁盘使用率计算|我对吗?
【发布时间】:2014-03-07 22:19:10
【问题描述】:

我正在尝试估计 MySQL RDBMS 中表的每条记录所需的实际磁盘使用空间。

表格的结构如下:

  • ID INT 4 字节;
  • VARCHAR(34) 34 字节;
  • INT 4 字节;
  • INT(5) 4 字节;
  • INT 4 字节;
  • INT 4 字节,也是 FOREIGN KEY;

所以有 5 个 INT 字段和一个最多 34 个字符(即 34 个字节)的 VARCHAR。

我有两个问题:

1) 每条记录的总数应该是 54 个字节(当然,使用变量 VARCHAR)我说的对吗,或者在估计磁盘使用空间时我应该考虑一些开销字节?

2) 我还使用了 INT(5) 而不是 CHAR(5),因为我只需要在该字段中存储 5 个数字(我将通过应用程序来执行此操作,使用 regExp 和字符串长度,因为我知道INT(5) 可能超过一个 5 位的 int)。 但这是否可以被认为是磁盘使用空间的优化,因为我使用的是 INT(4 个字节)而不是 5 个字节的 CHAR(5),即每条记录多 1 个字节?

感谢关注!

【问题讨论】:

  • 检查这个答案 - 有一些计算dba.stackexchange.com/questions/59909/…
  • 要计算确切大小,请提供其他信息:1) ID 是主键吗? 2) VARCHAR 字段 - 什么编码? 3) 字段可以为 NULL 吗?
  • 是ID为PRIMARY KEY AUTO_INCREMENT,VARCHAR字段的编码为utf-8编码(表的CHARSET设置为UTF8),所有字段不为NULL。正如我之前所说,最后一个 INT 字段也是 FOREIGN KEY。那么我错过了多少开销?

标签: mysql record diskspace disk-access


【解决方案1】:

一条记录本身将使用

1 个字节的偏移量

可空位中的 0 个字节

“额外字节”标头中的 5 个字节

4 字节 ID

6 字节交易 ID

7 字节回滚指针

VARCHAR(34) 中的 0-3*34 个字节(由于 UTF8,一个字符最多可能占用 3 个字节)

4*4 字节,其他整数

FK 的每个不同值将导致二级索引中的一条记录。它将使用

“额外字节”标头中的 5 个字节

FK 值的 4 字节 INT

主键的 4 字节 INT

其他开销是页面级别: 标头中每页 120 字节 (16k) 页面填充因子 15/16 - 即一页可能包含 15k 条记录。

最后一个 - 添加非叶子页面使用的空间,无论如何应该很小

所以,回答问题 - 1) 是的,您可以使用上述信息计算出一些开销。

2) UTF8 中的 CHAR(5) 将为其长度添加一个字节,因此 INT 看起来很适合使用

【讨论】:

  • 如果您使用 utf8mb4_unicode_ci ,每个字符也可以有 4 个字节。但我认为OP使用utf8_general_ci
  • 谢谢,非常有用的回答!
猜你喜欢
  • 2017-01-16
  • 1970-01-01
  • 2011-02-19
  • 1970-01-01
  • 2015-03-23
  • 2019-08-29
  • 2012-09-12
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多