SQL Server 二进制文件存储



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

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

可以创建一个单独的文件组,其文件位于不同的卷上,然后显式创建在该文件组上存储 LOB 数据的表。文件组指定是 CREATE TABLE 和 CREATE INDEX 语句的一部分,缺省值是 PRIMARY 文件组。

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

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

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

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

最新更新