3

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

我现在为我正在处理的现有应用程序设计表格,这个问题浮现在我的脑海。我对将我的项目的详细描述存储在 varchar(max) 列的同一个项目表中产生共鸣。我知道我无法索引此列,但没关系,因为我不会对这些列进行搜索。

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

如果我遗漏了什么,或者将我的描述存储在 varchar(max) 的同一张表上是个好方法,你能给我输入吗?谢谢!

4

2 回答 2

6

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

请参阅表和索引组织

于 2009-09-11T17:12:40.897 回答
1

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

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

于 2009-09-11T16:47:34.230 回答