2010-01-21 39 views
0

我在InnoDB中有一个很大的表,我想在合理范围内尽量减少它的大小。对于一些列,这些值在每行中几乎总是相同的,所以我想尝试利用这一点。InnoDB没有在磁盘上存储什么值?

举例来说,如果我有一个int列(或datetimevarchar或其他),将在该列中的值null实际上并不存储在磁盘上?也就是说,它是否会比每行存储号码1小?

或者在int not null default 0列中,0占用的空间比1少,甚至根本没有空间? (我知道我可以在一些大桌子上试试它,但是对于我的真实数据来说,尝试的速度会很慢,并且测量数据库中事物的大小可能会很挑剔,所以我想听到有人说话有点知识!)

回答

0

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

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

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

0

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

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