XML数据类型在SQL Server中与NVARCHAR(MAX)相比的性能惩罚是什么?

27

我有一个数据库将记录日志条目。

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

我有点担心CPU开销,但更担心数据库增长得更快(FoxyBOA在参考问题中使用XML时数据库增长了70%)。

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

请分享您的见解/经验。

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

2个回答

36

如果您有XML,并且可以确定它始终是XML格式,我建议您一定要选择XML。SQL Server以优化的格式存储XML格式的数据- 您甚至不需要任何XML索引就可以获得好处。

如果您将5000行5KB的XML数据插入到XML列中,则大约需要1250个页面,即9 MB。如果使用NVARCHAR(MAX)将相同的5000行具有相同5KB的XML数据插入,则会使用超过3700个页面或29 MB-这是一个相当大的差异!

如果您能够在SQL Server中将XML与存储的XML模式关联起来,这种差异应该更加明显。此外,您还可以保证所存储的XML符合模式-在某些情况下非常有用!无法使用普通的NVARCHAR(MAX)列实现这一点...

我不认为使用XML而不是NVARCHAR(MAX)会带来任何性能损失-相反,它可能效率稍微更高。因为在显示或提取内容时,您可能从SQL Server检索的数据量较少,所以我认为它甚至比NVARCHAR(MAX)略快。


1
但这是针对日志条目的,因此您可能希望在写入时不使用索引开销(如果序列化对象很大,则可能非常显著),即使这会使读取变得更慢? - MusiGenesis
当您只需要显示整个XML(当您需要查看日志条目时)时,XML索引并不会提供太多帮助,但肯定会增加开销!是的,当然可以。 - marc_s

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接