在SQL Server中存储图像?

我已经做了一个小型的演示网站,我在图像存储在SQL服务器上的图像列。 我有几个问题是…

  • 这是一个坏主意吗?

  • 当它增长时,它会影响我网站的性能吗?

另一种方法是将图像存储在光盘上,并只将该图像的引用存储在数据库中。 这是很多人都有的共同困境。 如果可以的话,我会欢迎一些build议,实际上会很乐意尽可能减less错误。

微软研究院的一篇很好的论文称为“Blob or Not To Blob” 。

经过大量的性能testing和分析得出的结论是:

  • 如果您的图片或文档的大小通常小于256K,则将其存储在数据库VARBINARY列中效率更高

  • 如果您的图片或文档通常大小超过1 MB,则将其存储在文件系统中效率更高(使用SQL Server 2008的FILESTREAM属性,它们仍处于事务控制和数据库的一部分)

  • 在这两者之间,这取决于你的使用情况,这有点夸张

如果您决定将图片放入SQL Server表中,我强烈build议使用单独的表来存储这些图片 – 不要将员工照片存储在员工表中 – 将它们保存在单独的表中。 这样一来,员工表就可以保持精简并意味着高效,假设您并不总是需要select员工照片作为查询的一部分。

对于文件组,请查看文件和文件组结构以了解介绍。 基本上,您可以从一开始就为大数据结构创build一个单独的文件组的数据库,或者稍后添加一个额外的文件组。 我们称之为“LARGE_DATA”。

现在,只要你有一个新的表来创build哪些需要存储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的BLOB与文件存储小PNG图像?

我最后的结论是,对于像个人资料图片这样的东西,只需要一个小方形图片,每个用户都需要在那里,mySQL会比在硬盘上存储一堆大拇指更好,而对于相册和类似的东西,文件夹/图像文件比较好。

希望它有帮助

我宁愿将图像存储在目录中,然后将对图像文件的引用存储在数据库中。

但是,如果将图像存储在数据库中,则应对数据库进行分区,以使图像列位于单独的文件中。

你可以在http://msdn.microsoft.com/en-us/library/ms179316.aspx阅读更多关于使用文件组的信息。;

另一个选项在2012年发布,称为文件表: https : //msdn.microsoft.com/en-us/library/ff929144.aspx

为什么将图片存储在数据库中并不是在Web服务器的目录中。

您已经创build了一个应用程序,将大量的图片存储在服务器上的一个文件夹中,客户端已经使用了多年。

现在他们来找你。 他们的服务器已被破坏,他们需要在新的服务器上恢复它。 他们已经无法访问旧的服务器了。 他们唯一的备份是数据库备份。

你当然有源,可以简单地部署到新的服务器,安装SqlServer和恢复数据库。 但是现在所有的照片都没了

如果你已经保存在SqlServer中的图片,一切都会像以前一样工作。

只是我2美分。

当在SQL Server中存储图像时, 不要使用'图像'数据types ,根据MS,它将在新版本的SQL服务器中被逐渐淘汰。 改用varbinary(max)

https://msdn.microsoft.com/en-us/library/ms187993.aspx