2009-09-11 88 views
3

在我以前的公司之一,我们曾经有一个单独的表,我们在文本类型列上存储了长描述。我认为这是因为文本类型带来的限制。我需要为nvarchar(最大)描述的单独的表

林目前正在设计的,我的工作就和这个问题在我脑海中的现有应用程序表。我对将我的项目的长描述存储在varchar(max)列上的同一个项目表上产生共鸣。我明白,我不能索引这一列,但这是好的,因为我不会在这些列上进行搜索。

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

能否请您给我的输入,如果我缺少的东西,或者储存我的描述在同一个表上VARCHAR(max)是不错的办法?谢谢!

回答

5

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

请参阅Table and Index Organization

+0

真棒资讯,谢谢。 +1 – 2009-09-11 21:55:54

1

这取决于你的使用频率,但没错,你可能希望在一个单独的表。在做出决定之前,您需要阅读SQL文件分页,页面分割以及sql如何存储数据的详细信息。

简短的回答是,varcharmax()肯定会产生在那些字段长度改变很多性能下降,由于增加页面拆分这是昂贵的操作。

+0

并保持在同一个表减少表的性能甚至我在做查询表中检索不包含描述列中的数据为varchar(最大)列(这将是对我的钥匙)?我也很好奇这些性能下降是否足以将列分隔到其他表中。我只是不想做一些可以忽略的不必要的工作。 – kaivalya 2009-09-11 20:14:31

+0

也许吧。这取决于字段更新的频率。如果它们只是INSERT一次,而且很少更新,那么它就不是那么重要。 性能增加是否有意义是您通过建模您的特定场景才能知道的真正东西。用预期的行数填充表格。按照您期望的速度开始插入和更新一台机器,然后用另一台机器开始启动大量选定的机器。测量性能使用不同的布局创建一个新的数据库并再次测试。 – 2009-09-11 21:55:02