我有一个将保留日志条目的数据库。
日志表中的一列包含序列化(到XML)对象,我的团队中的一个人建议使用XML数据类型而不是NVARCHAR(MAX)。 此表将“永久”保留日志(将来可能会考虑归档一些非常旧的条目。)
我有点担心CPU开销,但我更担心数据库可以更快地增长(使用XML时,引用问题中的FoxyBOA的数据库大70%)。
我已阅读此question并且它给了我一些想法,但我特别感兴趣的是澄清数据库大小是增加还是减少。
请与您分享您在这方面的见解/经验。
顺便说一句。我目前没有必要依赖SQL Server中的XML功能(在特定情况下,我几乎没有优势)。将提取偶尔的日志条目,但我更喜欢使用.NET处理XML(通过编写小型客户端或使用.NET程序集中定义的函数)。
答案 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