SQL Server二进制文件存储

时间:2012-04-24 04:06:26

标签: sql-server database data-storage

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

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

1 个答案:

答案 0 :(得分:4)

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

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

你可以在我12年前写的this FAQ article中阅读我过时和冗长的观点。

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

最后,关于文件/文件组处理的一些advice on MSDN可能很有用。