MySQL:NULL字段使用多少空间?

时间:2011-06-10 21:22:45

标签: mysql

将数据设为NULL是否会保留任何内存而不是正常大小?

3 个答案:

答案 0 :(得分:7)

如果您将字段设置为not null,则在MyISAM中占用较少空间。
将其设置为接受null将使其在MyISAM中占用更多空间。

在InnoDB中null值占用的空间较少,因此可能会在那里工作。

如果使用blob字段,MySQL无论如何都会将其存储在不同的文件中。

或者(我的推荐)
另一种选择是将字段添加到此表中,但要执行

table extra_data
   id integer primary key
   big_table_id integer
   large_data_seldom_used varchar(65000)

如果您需要选择额外数据,请执行以下操作:

SELECT large_data_seldom_used FROM bigtable b
INNER JOIN extra_data e ON (e.big_table_id = b.id)

这样你就不必在bigtable上添加额外的字段,如果extra_field很少使用,可以节省大量空间。

答案 1 :(得分:6)

这在Storage Requirements的MySQL手册章节中讨论过。没有简单的答案;它取决于列的数据类型,列是否被索引;和存储引擎。对列使用NULL的影响可以从无到有几个字节变化(取决于其他列也可以为NULL)。

将列声明为接受NULL并实际存储NULL值的存储影响可能很小。具有大量NULL值的列通常表示需要(进一步)标准化。

基本规则是,根据数据的属性设计架构,而不是根据存储影响来设计架构。只有在结果出现问题时才能解决问题。

答案 2 :(得分:0)

此外,虽然NULL本身不需要任何存储空间,但如果表定义包含定义为NULL的任何列,则NDBCLUSTER每行保留4个字节,最多32个NULL列。 (如果NDB群集表定义了32个以上的NULL列,最多64个NULL列,则每行保留8个字节。)