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

Pio*_*iak 26 xml t-sql sql-server nvarchar

我有一个数据库,将保留日志条目.

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

我有点担心CPU开销,但我更担心数据库可以增长得更快(引用问题的FoxyBOA在使用XML时会增加70%的数据库).

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

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

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

mar*_*c_s 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)列无法做到这一点......

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