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

标签 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

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

最佳答案

在 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 支持实现为选择加入或选择退出的功能。

只是一个旁注

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

关于sql - 在 SQL Server 数据库中存储大字符串的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26926818/

相关文章:

php - 关键字功能,如 Stackoverflow

sql - 如何删除 MS SQL 数据库中的部分重复项?

MySQL 使用 AND 语句查找重复记录

mysql - 查找两个字段之间的差异作为表中的列

php - pdo 驱动程序不支持 Linux 上的事务

database - Postgresql - 备份数据库并在不同所有者上恢复?

iphone - iPhone Web应用程序:HTML5数据库和音频文件

mysql - MySQL 有 max(a,b) 函数吗?

mysql - 是否有与 MySql 等效的 Profiler?

sql-server - 只读用户的 SQL Server 权限以防止锁定