单独的表中的SQL Server varbinary(max)和varchar(max)数据

时间:2012-01-02 18:12:35

标签: sql-server

使用带有SP2的SQL Server 2005标准版

我需要设计一个表格,我将存储一个文本文件(~200KB)以及文件名,描述和日期时间。

我们应该设计一个表,其中varchar(max)和varbinary(max)数据应该存储在一个单独的表中,还是LOB数据类型的列应该是主表的一部分?

根据这个帖子 What is the benefit of having varbinary field in a separate 1-1 table?

但是,我没有在某种程度上同意的性能或运营利益 我可以看到两个好处

  1. 将这些存储在可以存储在单独文件组中的可分离表中
  2. 您无法在包含lob数据类型ONLINE
  3. 的表上重建索引

    任何建议将不胜感激。

2 个答案:

答案 0 :(得分:7)

我会建议反对分居。它使设计复杂化很少或没有任何好处。您可能知道,SQL Server已经将LOB存储在单独的分配单元上,如Table and Index Organization中所述。

您可以通过在CREATE TABLE语句中适当指定所需的文件组来明确解决您的第一个问题(LOB数据的单独文件组分配),正如Mikael已经指出的那样。

您的第二个问题不再是SQL Server 2012的问题,请参阅Online Index Operations for Indexes containing LOB columns。甚至在SQL Server 2012之前,您可以使用LOB重新组织索引而不会出现问题(并且REORGANIZE在线)。鉴于完整的索引重建是非常昂贵的操作(在线重建必须在表/索引级别完成,没有分区在线重建选项),你是吗?确定你想要使设计复杂化以容纳一方面很少需要的东西,另一方面,当你升级到SQL 2012时可以使用它?

答案 1 :(得分:0)

我可以用一个简单的词来回答你的问题:吻。

当然代表...保持简单愚蠢。

添加表通常是禁止的,除非你真的需要一个来解决问题。

一般来说,我不同意拆分表。它增加了数据库和代码的复杂性。在表中使用无用的列是一件坏事,但是当你只需要一个表时它没有多个表那么糟糕。

您可以考虑添加另一个表的情况:

  1. 您的某些列是BloB的数据(大于页面大小),很少使用它们,而且经常访问其他数据量较小的列。
  2. 如果你缺乏大脑。
  3. 如果你是邪恶的。
  4. 或者......如果你试图惹恼你的同事。