在单独的1-1表中使用varbinary字段有什么好处?

Dra*_*čić 1 sql-server performance database-design sql-server-2005 varbinary

我需要将二进制文件存储在SQL Server 2005上的varbinary(max)列中,如下所示:

的FileInfo

  • FileInfoId int,PK,identity
  • FileText varchar(max)(可以为null)
  • FileCreatedDate日期时间等

FileContent

  • FileInfoId int,PK,FK
  • FileContent varbinary(最大)

FileInfo与FileContent具有一对一的关系.FileText用于在没有要上载的文件时使用,并且仅为项目手动输入文本.我不确定有多少百分比的项目会有二进制文件.

我应该创建第二个表.两个表设计会有任何性能改进吗?有任何合理的好处吗?

我找到了这个页面,但不确定它是否适用于我的情况.

Rem*_*anu 6

没有绩效也没有运营优势.由于SQL 2005的LOB类型储存您的引擎在一个单独的分配单元,独立的B树.如果您研究SQL Server 的表和索引组织,您将看到每个分区最多有3个分配单元:数据,LOB和行溢出:

表组织

LOB字段(varchar(max),nvarchar(max),varbinary(max),XML,CLR UDT以及不推荐使用的类型text,ntext和image)将在数据记录本身中,在聚簇索引中只有一个占用空间非常小:指向LOB分配单元的指针,请参阅记录剖析.

通过将LOB显式存储在单独的表中,您绝对不会获得任何结果.您只需添加不必要的复杂性,因为以前的原子更新必须将它们自己分配到两个单独的表中,从而使应用程序和应用程序事务结构复杂化.

如果LOB内容是整个文件,那么您可能应该考虑升级到SQL 2008并使用FILESTREAM.