【问题标题】:In SQL Server, should I put metadata for a FILESTREAM in a separate table?在 SQL Server 中,我应该将 FILESTREAM 的元数据放在单独的表中吗?
【发布时间】:2016-12-14 23:02:45
【问题描述】:

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

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等字段在表或不同表中的优缺点是什么(引用同一个DocumentId,当然)?

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

【问题讨论】:

    标签: sql-server sqlfilestream


    【解决方案1】:
    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. 我自己测试过,执行计划和统计一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多