我试图了解处理大部分为空的列的最佳方法磁盘空间 and 指数表现。将所有空位放入 NULL 与 ''(对于 varchar/text)与 0(对于 int)之间有区别吗?
Thanks.
不,使用 NULL 不会比空占用更少的空间VARCHAR
or INT
场地。事实上它可能会占用more空间。原因如下:
A VARCHAR
存储为大小 + 值。用于大小的字节数取决于最大存储空间VARCHAR
. VARCHAR(255)
需要一个字节,VARCHAR(65536)
需要两个字节等等。
So that VARCHAR(255)
即使您存储空字符串,列也会占用一个字节。下表每行至少占用一个字节(加上一些其他可能的开销,具体取决于存储引擎)。
CREATE TABLE sample (
a VARCHAR(255) NOT NULL
);
To save NULL
值,MySQL 对每一行使用一个位掩码。每个字节最多可以存储 8 个可为空的列。所以如果你有一个这样的表:
CREATE TABLE sample (
a VARCHAR(255) NULL
);
每行至少需要两个字节。储存NULL
只需设置该位,无论您使用与否,它都已被保留。该字节为VARCHAR
即使列设置为,每行仍使用 的大小NULL
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)