对 14K 记录使用 FOR XML AUTO, ROOT('RootName'), TYPE 会使 SQL Query 变慢

Posted

技术标签:

【中文标题】对 14K 记录使用 FOR XML AUTO, ROOT(\'RootName\'), TYPE 会使 SQL Query 变慢【英文标题】:Use of FOR XML AUTO, ROOT('RootName'), TYPE for 14K records makes SQL Query slow对 14K 记录使用 FOR XML AUTO, ROOT('RootName'), TYPE 会使 SQL Query 变慢 【发布时间】:2017-04-20 12:22:48 【问题描述】:

我正在研究存储过程。 它使用视图并将结果集表转换为 XML 格式。 我们使用了语句'FOR XML AUTO, ROOT('toxicsite'), TYPE'。 视图将 14k 记录返回给我,并在其转换为 XML 之后......这需要 2 分钟。 需要其他替代方法或如何优化查询转换的帮助

【问题讨论】:

只是为了正确理解这一点:没有FOR XML 的查询运行速度足够快,但是当您添加FOR XML 时它会变慢吗?你是如何测量时间的?你在用 XML 做什么? 14k 记录是相当多的。 XML 不是为更大的数据设计的... 是...如果我从视图中获取数据,它将在 17 秒内返回(14k 记录)。但是如果我应用 ForXML... 这是一个要求.. 我将此 XML 发送到 API 以进行进一步处理. 【参考方案1】:

我只是用一个简单的SELECT TOP 14000 * FROM SomeBigTable 尝试了这个。 SSMS 在 2 秒后准备就绪。使用FOR XML AUTO,它返回的速度也很快。我不认为,创建 XML 需要那么长时间...

如果您的VIEW 非常复杂,那可能是AUTO 在欺骗您。 AUTO 尝试为您的查询找到合适的内部结构(相关数据的嵌套)

作为速成,您可以尝试FOR XML RAW,TYPE 来检查性能差异。 Best 是使用 FOR XML PATH 的显式方法,您可以在其中自己指定嵌套和关系。

如果涉及 BLOB(VARBINARY 数据),如果涉及的字符串很多,特别是如果它们有很多 非拉丁 em> 个字符,你有实体编码的额外成本......

一般来说,XML 速度快得惊人...

【讨论】:

以上是关于对 14K 记录使用 FOR XML AUTO, ROOT('RootName'), TYPE 会使 SQL Query 变慢的主要内容,如果未能解决你的问题,请参考以下文章

想月薪14k?请锁定“WEB前端开发专业”

for-auto使用

sqlserver for xml

for循环的新用法和auto关键字

lensme sugarperl 人鱼姬14k

LENS ME | 韩国直邮 | 14K 星空系列 Sugarperl 新款