27

我有一个将保留日志条目的数据库。

日志表中的一列包含序列化(到 XML)对象,我团队中的一个人建议使用 XML 数据类型而不是 NVARCHAR(MAX)。该表将“永久”保存日志(将来可能会考虑归档一些非常旧的条目)。

我有点担心 CPU 开销,但我更担心 DB 会增长得更快(引用问题中的 FoxyBOA 在使用 XML 时得到了 70% 大的 DB)。

我已经阅读了这个问题 ,它给了我一些想法,但我对澄清数据库大小是增加还是减少特别感兴趣。

您能否分享您在这方面的见解/经验。

顺便提一句。我目前不需要依赖 SQL Server 中的 XML 功能(在特定情况下,我的优势几乎为零)。偶尔会提取日志条目,但我更喜欢使用 .NET 处理 XML(通过编写小型客户端或使用在 .NET 程序集中定义的函数)。

4

2 回答 2

35

如果您确实有 XML,并且您可以确定它始终是 XML,那么我肯定会建议您采用这种方式。SQL Server 以优化的格式存储 XML - 您甚至不需要任何 XML 索引即可从中受益。

如果将 5KB 的 XML 的 5000 行插入到 XML 列中,您将获得大约 1250 页 = 9 MB。将具有相同 5KB XML 的相同 5000 行插入 NVARCHAR(MAX) 使用超过 3700 页或 29 MB - 相当不同!

如果您可以将您的 XML 与存储在 SQL Server 中的 XML 模式相关联,那么这种差异应该会更加明显。另外,您还可以保证存储的 XML 符合模式 - 有时会非常有用!不能用普通的 NVARCHAR(MAX) 列做到这一点......

而且我不同意在 NVARCHAR(MAX) 上使用 XML 会有任何性能损失——恰恰相反。由于当您要显示或获取内容时,您可能从 SQL Server 检索较少的数据,所以我认为它甚至比 NVARCHAR(MAX) 快一点。

于 2010-05-21T15:56:50.480 回答
3

此基准测试显示 XML 数据类型使用较少的 IO 但比 VARCHAR(MAX) 多一点的 CPU。我认为 NVARCHAR(MAX) 会占用更多的 IO,因为它是 unicode。

http://searchsqlserver.techtarget.com/tip/XML-data-type-in​​-SQL-Server-2005-vs-VARCHAR-MAX

于 2010-08-14T12:54:18.883 回答