将数据设为NULL是否会保留任何内存而不是正常大小?
答案 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个字节。)