Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 与NVARCHAR(最大值)相比,SQL Server中XML数据类型的性能损失是什么?_Sql Server_Xml_Tsql_Nvarchar - Fatal编程技术网

Sql server 与NVARCHAR(最大值)相比,SQL Server中XML数据类型的性能损失是什么?

Sql server 与NVARCHAR(最大值)相比,SQL Server中XML数据类型的性能损失是什么?,sql-server,xml,tsql,nvarchar,Sql Server,Xml,Tsql,Nvarchar,我有一个数据库,它将保存日志条目 日志表中的一列包含序列化(到XML)对象,我的团队中的一个人建议使用XML数据类型,而不是NVARCHAR(MAX)。 此表将“永久”保存日志(将来可能会考虑归档一些非常旧的条目) 我有点担心CPU开销,但我更担心数据库会增长得更快(参考问题中的FoxyBOA在使用XML时获得了70%的数据库) 我读过这篇文章,它给了我一些想法,但我特别感兴趣的是澄清数据库大小是增加还是减少 你能分享一下你在这方面的见解/经验吗 顺便说一句,我目前不需要依赖SQL Server

我有一个数据库,它将保存日志条目

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

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

我读过这篇文章,它给了我一些想法,但我特别感兴趣的是澄清数据库大小是增加还是减少

你能分享一下你在这方面的见解/经验吗


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

如果您有XML,并且您可以确定它始终是XML,我绝对建议您这样做。SQL Server以优化的格式存储XML—您甚至不需要任何XML索引就可以从中获益

如果将5000行5KB的XML插入到XML列中,将得到大约1250页=9MB。在NVARCHAR(MAX)中插入具有相同5KB XML的相同5000行需要3700多页或29MB——这是一个很大的不同

如果可以将XML与存储在SQLServer中的XML模式相关联,那么这种差异应该更加明显。此外,您还可以保证存储的XML符合模式——有时会非常有用!无法使用普通NVARCHAR(MAX)列执行此操作


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

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


但这是针对日志条目的,因此您可能希望在不使用索引开销的情况下进行写入(如果序列化对象很大,这可能会非常大),即使这会使读取速度大大降低?是的,当然-只要您只需要显示整个XML(当您需要查看日志条目时),那么XML索引并没有多大帮助,但肯定会增加开销!