2011-03-18 51 views
2

我正在使用SQL Server 2000.我需要将图像存储在我的数据库中。我正在分析中,我是否需要在应用程序的数据库中创建一个新表,或者需要单独为图像上传创建一个新的数据库。如果我在同一个数据库中创建新表的性能如何?它会影响应用程序性能吗?将图像上传到新数据库而不是使用应用程序的数据库

+0

嘿,是否有可能只保存在数据库中的图像的网址?我认为这将是最有效的。 – clamchoda 2011-03-18 12:49:50

回答

2

通常将图像存储在数据库中是一件坏事。你有没有想过在文件系统中存储图像,只存储它在数据库中的位置?文件系统被设计用来存储文件,所以对它们进行旁路和使用数据库几乎没有什么好处。

+0

没有优势?简单的备份,与交易的整合。这个问题不像你所建议的那样黑白。 C.F. [blob或不blob - 数据库或文件系统中的大型对象存储?](http://research.microsoft.com/apps/pubs/default.aspx?id=64525) – 2011-03-18 12:57:23

+0

好吧 - 没有优点,但没有什么优势 – 2011-03-18 12:58:07

1

微软研究院有一篇名为To Blob or Not To Blob的非常好的论文。

他们大量的性能测试和分析后得出的结论是这样的:

  • 如果您的图片或文档通常低于在大小256K,将它们存储在数据库中IMAGE列更有效(截至SQL Server 2005中,IMAGE已被弃用 - 使用VARBINARY(MAX)代替)

  • 如果您的图片或文档通常超过1 MB的大小,将它们存储在文件系统更加高效

  • 在这两个之间
  • ,这取决于你的使用有点难以取舍的

如果你决定把你的照片到SQL Server表,我会强烈建议使用一个单独的表用于存储这些图片 - 不要将员工照片存储在员工表中 - 将他们保存在单独的表格中。这样一来,假设您并不总是需要选择员工照片作为查询的一部分,那么员工表可以保持精简并且意味着非常高效。

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

现在,只要你有一个新的表来创建一个需要存储IMAGE列,可以为大型数据指定该文件组:

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介绍,和玩用它!

+0

谢谢marc_s! – sri 2011-03-18 14:00:57

相关问题