在SQL Server中保存图像的最佳实践

时间:2013-06-19 19:40:53

标签: sql-server image

有很多次我想将图像保存到SQL Server。我已经阅读了一些保存图像的做法:

1)上传并保存图像到服务器,保存表内的路径

2)将图像保存为二进制文件

3)将图像保存为base64字符串

4)使用BLOB(我还没有研究它是如何工作的)

当您从服务器请求图像时,您知道哪种“方式”更快吗? 你知道哪种“方式”更好,以免使SQL服务器变慢吗? 你知道其他任何“方法”哪个更好吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

Microsoft已就此主题做了some research,并得出结论,这取决于图片的大小。如果您的大多数图像都是< 256Kb,你应该使用VARBINARY。另一方面,如果它们高于1Mb,则应使用FILESTREAM(通常存储在数据库文件外的文件系统中)。

如果您的图像链接到其他数据,将记录本身与图像分离到不同的表(即创建图像表)通常很有用,这样带有数据的表格仍然很小且易于操作。

答案 1 :(得分:3)

请注意,普遍没有“最佳”方式,但只有最符合您特定需求的方式。

“当您从服务器请求图像时,您知道哪种”方式“更快吗?” - 在本例中为#1,因为您实际上将图像存储在文件系统中,并且只从数据库中检索图像路径。

“你知道哪种”方式“更好,以免使SQL服务器变慢?” - 再次#1,因为它必须处理更少的数据。 SQL Server更容易检索表示存储图像的路径的varchar,而不是以任何形式检索图像本身。

No.1是最简单的,可能最容易设置,但请注意有缺点:

  • 如果从文件系统中删除了某些图像,则SQL Server无法确定是否发生了这种情况
  • 从SQL Server中删除行时,还需要从文件系统中删除图像(如果要保持清晰;)
  • 您还需要备份文件系统中的数据,而不仅仅是SQL Server数据库