我正在使用 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。
希望有人能给出更好的主意!
最佳答案
在 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上可以看到一些对比图关于它的性能。
Microsoft Research 还发布了 Technical Article: To BLOB or Not To BLOB关于文件流和 BLOBS。
您可以尝试一下,但一如既往,您必须运行一些特定于环境的测试以确保此解决方案是否有效。如果这是市场上的产品,最好将 FILESTREAM 支持实现为选择加入或选择退出的功能。
只是一个旁注
NVARCHAR
是 VARBINARY
的两倍,因为 SQL Server 将每个字符存储在 unicode 中的 2 个字节上(NCHAR
,NVARCHAR
等)列。
关于sql - 在 SQL Server 数据库中存储大字符串的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26926818/