【问题标题】:tables with multiple varbinary columns具有多个 varbinary 列的表
【发布时间】:2012-04-12 14:17:21
【问题描述】:
如果我有一个数据类型为 varbinary(Max) 的表,并且列上有 FILESTREAM 属性。现在我需要存储另一个二进制数据但没有 FILESTREAM 属性。那么,如果我在同一个表上添加另一个具有 VARBINARY(MAX) 数据类型的列,会有任何性能问题吗?如果我将具有 FILESTREAM 属性的表分开并创建另一个单独的表来存储其他 VARBINARY(MAX) 数据,是否可以获得更快的性能?
【问题讨论】:
标签:
sql-server
database
database-design
【解决方案1】:
对于你的这个问题。你可以。
Filestream 是 sqlserver2008 中的新特性,而 2012 年,更改名称,调用 fileTable。
我测试了它。这个功能是使用数据库管理文件.and up file 大约 5M/s。
对于您的其他列,如果您不打开文件流,该文件将更改二进制文件,并存储在 sqlserver 数据文件中。
打开文件流,文件将存储在服务器上,由sqlserver管理。
关于第二个问题,我不是100%肯定,但是如果你使用文件流,效率会更高,需要注意备份和存储。
一年前,我在我们的系统中实现了这个功能,我有shcam,如果你想要,我会发给你。
对不起,我的英语不好。
【解决方案2】:
如果您在同一张表上添加另一个 VARBINARY(MAX),您的性能可能会受到影响
当设置了 FILESTREAM 属性时,SQL Server 将 BLOB 数据存储在 NT 文件系统中,并在表中保存该文件的指针。这使 SQL Server 可以利用 NTFS I/O 流功能。并减少 SQL 引擎的开销
MAX 类型(varchar、nvarchar 和 varbinary)以及在您的情况下为 VARBINARY(MAX) 数据类型不能在内部存储为连续的内存区域,因为它们可能会增长到 2Gb。所以它们必须由流接口表示。
它们会非常影响性能
如果您确定您的文件很小,您可以选择 VARBINARY(MAX),否则如果文件较大,则 2gb FILESTREAM 是您的最佳选择
是的,我建议您创建另一个单独的表来存储其他 VARBINARY(MAX) 数据