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

Jim*_*Jim 5 xml sql-server performance sql-server-2005

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

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

谢谢.

Rem*_*anu 6

这取决于性能问题.

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

因此,与所有性能问题一样,建议首先进行测量,然后再进行削减.建议的方法是应用经过良好测试和验证的性能调查方法,如等待和队列.猜测会让你无法快速降落.


小智 3

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