Answers:
Microsoft Research的一篇非常好的论文叫做To Blob或Not To Blob。
经过大量的性能测试和分析,他们的结论是:
如果您的图片或文档的大小通常小于256KB,则将它们存储在数据库VARBINARY列中会更有效
如果图片或文档的大小通常超过1 MB,则将它们存储在文件系统中的效率更高(并且使用SQL Server 2008的FILESTREAM属性,它们仍处于事务控制之下,并且属于数据库的一部分)
在这两者之间,根据您的使用情况有些不同
如果您决定将图片放入SQL Server表中,我强烈建议使用一个单独的表来存储这些图片-不要将员工照片存储在employee表中-请将它们保存在单独的表中。这样,假设您并不需要总是选择员工的照片作为查询的一部分,那么Employee表就可以保持精简,卑鄙和高效。
对于文件组,请查看“ 文件和文件组体系结构 ”以获取简介。基本上,您可以从一开始就为大型数据结构使用单独的文件组创建数据库,或者稍后再添加其他文件组。我们称之为“ LARGE_DATA”。
现在,只要您有一个新表要创建,该表需要存储VARCHAR(MAX)或VARBINARY(MAX)列,就可以为大数据指定此文件组:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
查看有关文件组的MSDN简介,并试用它!
我曾经陷入这个困境,并在谷歌上研究了很多意见。我发现的确是,很多人确实看到了将映像保存到磁盘以获取较大映像的效果更好,而mySQL允许更轻松地访问,尤其是从PHP之类的语言。
我发现了类似的问题
我的最终结论是,对于个人资料图片之类的东西,每个用户只需要一个小正方形图像,mySQL会比在硬盘中存储一堆大拇指要好,而对于相册和诸如此类的东西,文件夹/ image文件更好。
希望能帮助到你
我希望将图像存储在目录中,然后将对图像文件的引用存储在数据库中。
但是,如果确实将映像存储在数据库中,则应该对数据库进行分区,以便映像列位于单独的文件中。
您可以在http://msdn.microsoft.com/zh-cn/library/ms179316.aspx中阅读有关使用文件组的更多信息。
为什么将图片存储在数据库中而不是将图片存储在Web服务器上的目录中为什么很好。
您已经创建了一个应用程序,其中许多图片存储在服务器上的文件夹中,客户端已经使用了多年。
现在他们来找你。他们的服务器已被破坏,需要将其还原到新服务器上。他们再也无法访问旧服务器了。他们仅有的备份是数据库备份。
您当然拥有源代码,可以简单地将其部署到新服务器,安装SqlServer并还原数据库。但是现在所有照片都消失了。
如果已将图片保存在SqlServer中,则所有内容将像以前一样工作。
只是我的2美分。
根据MS的说法,当在SQL Server中存储图像时,请勿使用“图像”数据类型,它已在SQL Server的新版本中逐步淘汰。使用varbinary(max)代替
2012年发布了另一个选项,称为文件表:https : //msdn.microsoft.com/en-us/library/ff929144.aspx