在SQL Server数据库中存储大字符串的最佳方法?

时间:2014-11-14 09:34:01

标签: sql sql-server database sql-server-2008

我正在使用SQL Server 2005和2008 R2数据库,我需要存储可能包含超过5万个字符的大字符串。目前我使用数据类型nvarchar(max)来存储更大的字符串。

我对nvarchar(max)的问题是它需要更多的数据库存储空间。我已经测试了 100000 记录,并且需要 10 GB 内存来存储 100000 记录。

这里有一个好处是,我不会将此列用于SQL Where查询目的,因此我决定将数据存储为BLOB数据类型 - nvarbinary(max) 。通过这种方式,存储内存减少了50%,这意味着需要 5 GB 内存来存储 100000 记录。

所以我的问题,因为我不打算将此字符串数据用于SQL Where查询目的,我想以任何其他更好的方式存储它,以便数据库大小将减少到 5 GB

希望,有人会给出更好的主意!

1 个答案:

答案 0 :(得分:5)

在SQL Server 2008中,您可以选择使用FILESTREAM来存储大型二进制数据。在这种情况下,数据将在查询中可用,但物理存储在文件系统中。

Microsoft发布了SQL Server Technical Article,其中包含有关如何以及何时使用FILESTREAM的有用信息。在第8页,比较图表显示,如果存储的数据大于1MB , FILESTREAM优于存储在数据库中的BLOB。

注意 FILESTREAM在SQL Server 2005中不可用! (和SQL Server 2005 is no longer supported by Microsoft - 除了扩展支持外)

还有一些要阅读的文章

您可以在SQLSkills blog上看到有关其效果的一些比较图表。

微软研究院也发布了关于文件流和BLOBS的Technical Article: To BLOB or Not To BLOB

您可以尝试一下,但是一如既往,您必须运行一些特定于环境的测试以确保此解决方案有效。如果这是市场上的产品,最好将FILESTREAM支持作为选择加入或选择退出功能实施。

只是旁注

NVARCHARVARBINARY的两倍,因为SQL Server将每个字符存储在unicode(NCHARNVARCHAR等)列中的2个字节上。