【问题标题】:Is there a performance improvement to be had by using XML rather than NVARCHAR(max)?使用 XML 而不是 NVARCHAR(max) 是否可以提高性能?
【发布时间】:2012-05-03 17:05:41
【问题描述】:

我将在数据库中存储一些文本。文本恰好是 xml。

我只是存储和读取文本的“blob”(我没有使用任何 xml 查询或索引工具)。

将列声明为xml 有什么好处:

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)

而不是nvarchar(max):

CREATE TABLE docs (pk INT PRIMARY KEY, xCol NVARCHAR(max) not null)    

我想如果我给 SQL Server 提示 text 实际上是 xml, then it can apply compression for more efficient storage

注意:第三个选项是我在客户端压缩文本并将数据存储在varbinary(max) blob 列中。

【问题讨论】:

  • 使用 XML 数据类型,您的数据以文本格式存储 - 它被“标记化”并以更优化的方式存储。所以是的 - 如果你有 XML - 将其存储为 XML(你也可以直接在 XML 列上使用 XQuery 方法,无需转换和杂乱的东西)

标签: xml sql-server-2005 blob


【解决方案1】:

将其存储为 XML 很可能会导致比 nvarchar 更小的存储大小(我发现这是真的,至少由于删除了不相关的空白和其他此类格式)。但是,SQL Server 会在每次插入和更新之前检查 XML 的格式是否正确,因此您可能会在这些时候遭受性能损失。我认为这种检查与任何数据类型检查一样也是一个优势。

【讨论】:

  • 嗯,我从未考虑过 SQL Server 可能更改 XML 的缺点;删除空格、randomizing the order of attributes 等。是否假定 SQL Server 可能会修改原始 xml?
  • retain your formatting 有一些方法,虽然我不是一个忠实的粉丝(我更喜欢re-format in c# 或其他东西)。这可能会增加存储的 XML 的大小。我个人没有见过 SQL Server 改变元素或属性的顺序。
  • 禁止更改元素的顺序,否则会导致 XML 无效(基于其架构)。但是XML对属性没有这样的排序要求,“开始标签或空元素标签中属性规范的顺序并不重要”
  • 是的,我明白了。上面的 marc_s 或许说得最好。另一种看待它的方式是 XML 使用更多的 CPU 但更少的 I/O。与往常一样,您必须在自己的环境中进行测试,以了解确切的权衡并确定它们是否值得。
  • 接受的答案是“是的,但如果您不想在背后修改您的 xml,请不要这样做。”
猜你喜欢
  • 2011-01-28
  • 2011-05-21
  • 1970-01-01
  • 2019-12-29
  • 2023-03-28
  • 2011-08-24
  • 2021-05-17
  • 1970-01-01
  • 2011-02-28
相关资源
最近更新 更多