2

为了快速了解背景,我有一个我目前支持的应用程序,它在 Oracle 10.2 上运行,具有专门的 DBA。过去,当我想创建一个存储二进制数据的表(他们的世界中的 BLOB - 这可能是 PDF、DOCX 等)时,DBA 总是会“分区”该列/表的数据存储(不确定哪个)到磁盘上的单独物理区域。他们这样做的理由是,它有助于确保性能不会因将大量二进制文件存储在与发生查找的其余数据相同的文件中而受到影响。

我的问题是我是否应该为 SQL Server 做类似的事情(2012,尽管我怀疑版本是否重要)?如果是这样,我该怎么做?这样做的正确术语是什么?

4

1 回答 1

4

您可以创建一个单独的文件组,其文件位于不同的卷上,然后显式创建将 LOB 数据存储在该文件组上的表。文件组指定是CREATE TABLECREATE INDEX语句的一部分,默认为 PRIMARY 文件组。

在 SQL Server 中存储文件也有不同的选择,在 2008+ 中,您可以使用FILESTREAM(另请参见此处),在 2012 中,您可以使用FILETABLE。但是在大多数情况下,我很难证明将文件存储在数据库中的合理性。将文件存储在文件系统上并在数据库中存储指针通常不会出现问题。

您可以在我 12 年前写的这篇常见问题解答文章中阅读我过时且冗长的观点。

请记住,某些技术已经发生了变化(显然 FILESTREAM 和 FILETABLE 当时不可用),其中一些要点仍然相关......

最后,MSDN 上关于文件/文件组处理的一些建议可能对阅读有用。

于 2012-04-24T04:17:33.517 回答