代码之家  ›  专栏  ›  技术社区  ›  Jim

哪个插入更快,xml字段或varchar(max)字段?

  •  5
  • Jim  · 技术社区  · 15 年前

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

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

    谢谢。

    2 回复  |  直到 15 年前
        1
  •  3
  •   TomTom    15 年前

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

        2
  •  6
  •   Remus Rusanu    15 年前

    这取决于性能问题是什么。

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

    因此,和所有性能问题一样,建议首先测量,然后再切割。建议的方法是采用经过充分测试和验证的性能调查方法,例如 Waits and Queues . 猜测会让你一事无成。