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

kom*_*bsh 7 sql database sql-server 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以下.

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

Pre*_*red 5

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

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

注意 FILESTREAM在SQL Server 2005中不可用!(并且Microsoft不再支持SQL Server 2005 - 扩展支持除外)

还有一些文章需要阅读

您可以在SQLSkills博客上看到一些有关其性能的比较图表.

此外,Microsoft Research还发布了一篇技术文章:BLOB或BLOB,关于文件流和BLOBS.

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

只是一个侧面说明

NVARCHAR是两倍大VARBINARY,因为SQL Server存储每个字符上在Unicode(2个字节NCHAR,NVARCHAR等等)的列.