【问题标题】:MariaDB table size if FK is empty or Null如果 FK 为空或 Null,则 MariaDB 表大小
【发布时间】:2020-02-19 09:09:46
【问题描述】:

在投反对票后更新我的问题。

我有下表。

+-------------------------------+
|   tbl_IndexDemo               |
+---------+------+--------------+
|   ID    | INT  | Primary Key  |
|   FK_1  | INT  | Foreign Key  |
|   FK_2  | INT  | Foreign Key  |
|   FK_3  | INT  | Foreign Key  |
|   FK_4  | INT  | Foreign Key  |
+---------+------+--------------+

它有一个主键和四个外键。

我正在尝试估计一行的大小(以字节为单位)。

如果所有字段都有数据,大小是多少?我算了

 ID     4 bytes + 4 bytes (Index-PK)
 FK_1   4 bytes
 FK_2   4 bytes
 FK_3   4 bytes
 FK_4   4 bytes

 Total per row = 24 bytes

如果 FK_3 为 emtpy 或 NULL,那么该行的大小是多少?

我将 MariaDB 与 InnoDB 一起使用。

【问题讨论】:

标签: sql database foreign-keys mariadb


【解决方案1】:

计算 InnoDB 表的大小远非如此简单。但这是一种快速而肮脏的估计方法。你有 24 个;现在将其乘以 2 或 3。也就是说,粗略估计的行大小将是 48-72 字节。

至于 NULL 与否,那么每个 INT 只会产生 4 个字节的差异,如果有任何差异

请注意,可能有 4 个ROW_FORMAT 值。这给计算增加了难以量化的皱纹。 TEXTPARTITION 也会把估计大小弄得一团糟。

如果你担心空间问题,那么考虑一下你是否真的需要INT,它占用4个字节,限制为20亿。也许MEDIUMINT UNSIGNED(3 个字节,最大 16M)会更好——尤其是考虑到每次出现都节省 1 个字节。您将至少出现 3 次——tbl_IndexDemo 中的列、另一个表中的列以及 FK 隐式创建的 INDEX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2013-11-26
    • 2016-02-07
    • 2019-01-21
    • 2013-08-06
    • 2021-04-29
    相关资源
    最近更新 更多