将MySQL列值设置为NULL而不是0或''的磁盘空间含义

Noa*_*oam 8 mysql database

我正在尝试理解处理磁盘空间索引性能方面几乎为空的列的最佳方法.放入所有空位置NULL与''(对于varchar/text)对比0(对于int)是否存在差异.

谢谢.

Gav*_*wey 10

不,使用NULL不会占用比空VARCHARINT字段更少的空间.实际上它可能占用更多空间.原因如下:

A VARCHAR存储为大小+值.用于大小的字节数取决于最大存储空间VARCHAR.VARCHAR(255)需要一个字节,VARCHAR(65536)需要两个字节,依此类推.

因此,VARCHAR(255)即使存储空字符串,该列也会占用一个字节.下表每行至少需要一个字节(加上一些其他可能的开销,具体取决于存储引擎).

CREATE TABLE sample (
  a VARCHAR(255) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

为了保存NULL值,MySQL为每一行使用一个位掩码.每个字节最多可存储8个可空列.所以,如果你有这样一个表:

CREATE TABLE sample (
  a VARCHAR(255) NULL
);
Run Code Online (Sandbox Code Playgroud)

每行至少需要两个字节.存储NULL只是设置该位,无论您是否使用它,它都已被保留.VARCHAR即使列设置为,每个行仍然使用's size 的字节NULL.


归档时间:

查看次数:

3147 次

最近记录:

7 年,9 月 前