我需要一个单独的表来进行nvarchar(max)描述

时间:2009-09-11 16:42:00

标签: sql database database-design data-modeling

在我之前的一家公司中,我们曾经有一个单独的表,我们在文本类型列上存储了长描述。我认为这是因为文本类型带来的限制。

我现在正在为我正在处理的现有应用程序设计表格,这个问题出现在我的脑海中。我对在varchar(max)列上的相同项目表上存储我的项目的长描述感到很感兴趣。我知道我无法索引此列,但这没关系,因为我不会对这些列进行搜索。

到目前为止,我看不出有任何理由将此列与另一个表分开。

如果我遗失了某些内容,或者如果将我的描述存储在varchar(max)上的同一桌面上,那么请你给我输入是好方法吗?谢谢!

2 个答案:

答案 0 :(得分:6)

将字段保留在它们所属的表中。自SQL Server 2005以来,引擎在大数据类型甚至可变长度短数据类型方面变得更加智能。旧的TEXT,NTEXT和IMAGE类型已弃用。具有MAX长度的新型号是它们的替代品。对于SQL 2005,每个分区有3种类型的底层分配单元:一个用于行,一个用于LOB,一个用于行溢出。 MAX类型存储在LOB分配单元中,因此实际上引擎正在为您管理一个单独的表来存储大对象。行溢出单元用于行内可变长度数据,在更新后不再适合页面,因此它“溢出”到一个单独的单元中。

请参阅Table and Index Organization

答案 1 :(得分:1)

这取决于您使用它们的频率,但是,您可能希望在单独的表格中使用它们。在做出决定之前,您需要阅读SQL文件分页,页面拆分以及“如何”存储数据的详细信息。

简短的回答是varcharmax()肯定会导致性能下降,因为这些字段长度会因为页面拆分的增加而变化很大,这是昂贵的操作。