我的数据库中已有一个已填充的表。我现在要在此表中存储其他数据,但此数据需要存储一个额外的字段(可能是VARCHAR(40))。我想要的最后一件事是以某种方式为所有不使用它的现有条目分配这个空间。 MySQL在某种程度上是聪明的吗?如果将此字段设置为NULL,或者为包含此额外数据字段的数据创建新表可能会更好吗?
足够不会显着增加表的大小答案 0 :(得分:1)
这取决于您使用的是哪个存储引擎。如果您的列中的大部分值为NULL
,则InnoDB存储引擎(默认值)会提高性能。
因为在 InnoDB 中,每个列在行标题中都有一个“字段起始偏移量”,即每列一个或两个字节。如果列为NULL,则该字段起始偏移中的高位开启。在这种情况下,根本不需要存储该列。因此,如果你有很多NULL,你的存储应该大大减少。
参考:
SO Answer
Example for null value performance efficiency
注意:如果要在MS SQL中实现相同的功能,可以考虑使用SPARSE