sql-server - 哪个插入速度更快,XML 字段还是 Varchar(max) 字段?

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

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

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

谢谢。

最佳答案

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

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

因此,与所有性能问题一样,建议是先测量再切割。推荐的方法是应用经过充分测试和验证的性能调查方法,例如 Waits and Queues .猜测会让你很快无处可去。

关于sql-server - 哪个插入速度更快,XML 字段还是 Varchar(max) 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2782378/

相关文章:

php - 我如何使用 SimpleXML 处理一个巨大的 XML 文件,但又要防止出现内存和性能问题?

java - 从子元素创建 XPath

sql - T-SQL - 字符串连接

sql - 使用 SQL 创建新列

sql - 如何根据电话号码找到长途费率的最佳匹配?

SQL- 七日周报(星期日至星期六)

c# - 如何将任意 XML 转换(分解)为平面数据结构?

sql-server - 我可以在逻辑上对表中的列进行重新排序吗?

sql-server - 根据月度目标计算每日目标 Sales Power bi

c# - 为什么我不能使用 LINQ to SQL 将数据更新到数据库中?