与NVARCHAR(MAX)相比,SQL Server中XML数据类型的性能损失是多少?

时间:2010-05-21 15:32:53

标签: sql-server xml tsql nvarchar

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

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

我有点担心CPU开销,但我更担心数据库可以更快地增长(使用XML时,引用问题中的FoxyBOA的数据库大70%)。

我已阅读此question并且它给了我一些想法,但我特别感兴趣的是澄清数据库大小是增加还是减少。

请与您分享您在这方面的见解/经验。

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

2 个答案:

答案 0 :(得分:34)

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

如果将5000行5KB XML插入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)快一点。

答案 1 :(得分:3)

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

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

相关问题