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

ner*_*ist 14 mysql

将数据设为NULL可以保存任何内存而不是正常大小吗?

Joh*_*ica 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)
Run Code Online (Sandbox Code Playgroud)

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

SELECT large_data_seldom_used FROM bigtable b
INNER JOIN extra_data e ON (e.big_table_id = b.id)
Run Code Online (Sandbox Code Playgroud)

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


Ted*_*opp 7

有关存储要求的MySQL手册章节对此进行了讨论.没有简单的答案; 它取决于列的数据类型,列是否被索引; 和存储引擎.对列使用NULL的影响可以从无到有几个字节变化(取决于其他列也可以为NULL).

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

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

  • @Jay Dadhania - 确实,有时确实如此。但如果我们要抛弃格言,我会提出这个:如果它没有坏,就不要修理它。无论如何,我只是提出了一个优先事项:让数据模型正确,然后担心性能。正如一位智者曾经告诉我的那样,“我宁愿优化调试过的代码,也不愿调试优化过的代码。” (5认同)