我有一个必须添加列的大表(数十万条记录)。该列仅存储boolean(tinyint 0/1)。
目标是避免对现有记录使用额外的存储空间,因为默认情况下它们将为NULL / 0,将来可以设置1,但不是全部,也不是一次全部。
NULL也需要一些存储空间吗?或者添加一个支持NULL的列将任何物理数据添加到现有行?
答案 0 :(得分:0)
Johan回复this Question关于" MySQL: NULL字段使用了多少空间?"
如果将字段设置为非空,则MyISAM将占用更少的空间。
将其设置为接受null将使其在MyISAM中占用更多空间。
在InnoDB中,null值占用的空间更少,因此它可以在那里工作。
在他的回答中,提出创建新表而不是为你的大表添加新列:
另一种选择是不将字段添加到此表中,但要执行
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 :(得分:0)
(我假设您正在使用InnoDB存储引擎和COMPACT行格式)
<强> In theory 强>
在实践中: