我有从非常基本的信息保存的表。只是一个标题和一些日期字段。有一个称为注释的字段,该字段为varchar(4000),大多数情况下,我们将其保留为空白,但有时会在此处输入大量数据。这真的是一个糟糕的设计吗?还是这只是效率低下?
我认为为此列创建一个单独的表会更好。
注意:这是sql server 2008
SPARSE
和不使用SPARSE
... 进行任何空间/性能比较?
我有从非常基本的信息保存的表。只是一个标题和一些日期字段。有一个称为注释的字段,该字段为varchar(4000),大多数情况下,我们将其保留为空白,但有时会在此处输入大量数据。这真的是一个糟糕的设计吗?还是这只是效率低下?
我认为为此列创建一个单独的表会更好。
注意:这是sql server 2008
SPARSE
和不使用SPARSE
... 进行任何空间/性能比较?
Answers:
不使用时占用最小空间
开销很小,优化还为时过早。
在知道有问题之前,只需将其保存在一个表中即可。通过引入外部联接来破坏KISS,并增加查询数据的开销。
这个问题看起来非常相似:多余的空列会严重影响sql表的大小吗?
看起来答案是肯定的,它确实占用了空间,但是对于具有大量空值的列有一种压缩算法。
就设计而言,我认为将外部表链接到此表将是一种更简洁的设计。具有频繁使用null值的列会使数据库用户的工作更加困难,因为如果他们不小心的话,他们可能会意外地使用null值。因此,使用数据库的代码将需要包含错误检查,并且从那里变得很难看。
SPARSE
,而不仅仅是“具有很多空值的列”。
没关系-它已经是varchar列,因此仅在包含数据时才使用空格。如果您有很多像int这样的可为空的固定大小的列,则可能存在空间使用问题。
至于放在另一个桌子上,我不会打扰。 您还可以查看使用varchar(max)和in / out of row选项。 同样,可能还为时过早。