我已经做了一个小的演示网站,我在sql server上的一个图像列中存储图像。我有几个问题…
这是个坏主意吗? 当它增长时,它会影响我的站点的性能吗?
另一种方法是将图像存储在磁盘上,而仅在数据库中存储对图像的引用。这一定是很多人都遇到过的困境。我很欢迎你的建议,如果可以的话,我很乐意少犯一些错误。
我已经做了一个小的演示网站,我在sql server上的一个图像列中存储图像。我有几个问题…
这是个坏主意吗? 当它增长时,它会影响我的站点的性能吗?
另一种方法是将图像存储在磁盘上,而仅在数据库中存储对图像的引用。这一定是很多人都遇到过的困境。我很欢迎你的建议,如果可以的话,我很乐意少犯一些错误。
当前回答
2012年发布了另一个选项,名为文件表:https://msdn.microsoft.com/en-us/library/ff929144.aspx
其他回答
我更喜欢将图像存储在一个目录中,然后在数据库中存储对图像文件的引用。
但是,如果确实将图像存储在数据库中,则应该对数据库进行分区,以便图像列驻留在单独的文件中。
你可以在这里阅读更多关于使用文件组的信息http://msdn.microsoft.com/en-us/library/ms179316.aspx。
微软研究院有一篇很好的论文,叫《去斑点还是不去斑点》
经过大量的性能测试和分析,他们得出的结论是:
如果您的图片或文档通常小于256KB,那么将它们存储在数据库VARBINARY列中会更有效 如果你的图片或文档的大小通常超过1mb,那么将它们存储在文件系统中是更有效的(并且使用SQL Server 2008的FILESTREAM属性,它们仍然处于事务控制和数据库的一部分)。 在这两者之间,取决于你的用途
如果你决定把你的照片放在一个SQL Server表中,我强烈建议使用一个单独的表来存储这些照片——不要把员工照片存储在员工表中——把它们保存在一个单独的表中。这样,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关于文件组的介绍,并使用它!
2012年发布了另一个选项,名为文件表:https://msdn.microsoft.com/en-us/library/ff929144.aspx
我曾经陷入过这样的困境,并在谷歌上进行了大量的研究以寻求意见。我发现,对于较大的图像,许多人确实认为将图像保存到磁盘更好,而mySQL允许更容易的访问,特别是从PHP等语言访问。
我发现了一个类似的问题
MySQL BLOB vs文件存储小PNG图像?
我的最终结论是,对于个人资料图片这样的东西,每个用户都需要一个小的方形图像,mySQL会比在硬盘上存储一堆拇指更好,而对于相册和类似的东西,文件夹/图像文件更好。
希望能有所帮助
当在SQL Server中存储图像时不使用'image'数据类型,根据MS的说法,它将在新版本的SQL Server中逐步淘汰。使用varbinary(max)代替
https://msdn.microsoft.com/en-us/library/ms187993.aspx