在SQL Server中,我应该将FILESTREAM的元数据放在单独的表中吗?

时间:2016-12-14 23:02:46

标签: sql-server sqlfilestream

假设客户和文档的标准用例,客户可以拥有许多文档。还假设每个客户都会有很多大文件(从几千字节到几千元)。

DocumentStore表必须至少有......

DocumentId INT IDENTITY PRIMARY KEY, 
Stream VARBINARY(MAX) FILESTREAM NOT NULL,
DocGuid UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL
    UNIQUE DEFAULT NEWID

相同表格中的CustomerId, FileExtension, FileSize, Hash, CreatedBy, CreatedDate, ... goitf字段或不同表格中的优缺点是什么(引用相同的{{ 1}},当然)?

这个问题主要源于查询列时性能和分页等的不确定性。 (假设有一个关于CustomerId的附加索引,但可能没有其他索引。)

1 个答案:

答案 0 :(得分:0)

  1. FILESTREAM列位于单独的文件组中,因此没有性能和操作优势。

  2. 当您为FILESTREAM列使用单独的表时,FILESTREAM最佳做法都没有提到您获得了一些性能

    https://msdn.microsoft.com/library/hh461480 https://blogs.msdn.microsoft.com/blogdoezequiel/2011/02/11/best-practices-on-filestream-implementations/ https://www.mssqltips.com/sqlservertip/1875/best-practices-when-using-filestream-feature-of-sql-server/

  3. 即使不是常规VARBINARY列的情况

    What is the benefit of having varbinary field in a separate 1-1 table? SQL Server varbinary(max) and varchar(max) data in a separate table

  4. 我自己测试过,我有相同的执行计划和统计数据。 enter image description here