InnoDB没有将哪些值存储在磁盘上?

时间:2010-01-21 22:01:57

标签: mysql innodb

我在InnoDB中有一个非常大的表,我想在合理范围内最小化它的大小。对于一些列,每行的值几乎总是相同的,所以我想尝试利用它。

例如,如果我有int列(或datetimevarchar或其他),那么该列中的null值实际上不会存储在磁盘上?也就是说,它是否比在每一行中存储数字1小?

或者在int not null default 0列中,0会占用比1更少的空间,甚至根本没有空间吗?

(我知道我可以在一些大桌子上尝试它,但是对于我的真实数据来说,尝试的速度很慢,并且测量数据库中的东西大小可能很挑剔,所以我想听一些人说话知识地!)

2 个答案:

答案 0 :(得分:0)

每列的存储空间取决于数据类型requirement

1,因为INT需要4个字节,但是1作为BIGINT需要8个字节。

如果性能不是问题,请查看InnoDB的compression

答案 1 :(得分:0)

int是int是一个int,所以0不会占用比1更少的空间。而NULL只是一个位于同一空间的特殊值。

这听起来像是在询问稀疏列设置,其中NULLS由一个明显小于数据类型的值表示,或者根本不存储。我找不到InnoDB的任何内容,但是SQL Server 2008中有很多关于稀疏列的东西。