对 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 变慢的主要内容,如果未能解决你的问题,请参考以下文章