哪个插入更快,XML字段或Varchar(max)字段?

时间:2010-05-06 15:38:55

标签: sql-server xml sql-server-2005 performance

我们有一个存储xml Web服务请求和响应的历史表。目前它将它们存储到XML字段中,但我们遇到了插入的性能问题。我们只插入记录,不更新,选择或删除。我们截断了表并重建索引,但没有用。该表在标识字段上具有主聚簇索引,在日期时间字段上具有默认值GetDate()。我们正在运行SQL 2005 Server,但数据库处于SQL 2000兼容模式。

如果我们将字段类型从XML更改为VarChar(max)或VarChar(xxx),是否会加快插入速度?还有什么我们应该看的吗?

感谢。

2 个答案:

答案 0 :(得分:6)

这取决于性能问题。

  • 如果是CPU绑定,则XML验证可能是一个因素,varchar(max)可能更快。
  • 如果是IO绑定,则XML压缩存储优于nvarchar(max)松散格式,并且您的性能会下降。
  • 另一方面,如果问题XML片段很小,varchar存储提供了行内存储的机会,可能比XML更好。
  • 另一方面,行内存储会降低叶页行密度并导致读取性能问题。
  • 如果问题既不是CPU也不是IO,而是锁定争用,那么XML与varchar问题就与性能问题正交。插入热点页面锁存争用问题也是如此。同样,日志刷新性能问题也是如此。所有这些都表现为'慢插入'(对于某些慢速定义),并且通过用varchar替换XML,一切都不会发生变化。

因此,与所有性能问题一样,建议先测量并稍后剪切。建议的方法是应用经过充分测试和验证的绩效调查方法,如Waits and Queues。猜测会让你无法快速降落。

答案 1 :(得分:3)

varchar更快 - 无需解析。 XML数据类型做了一些非常繁重的内部提升。