对 14K 记录使用 FOR XML AUTO、ROOT('RootName')、TYPE 会使 SQL 查询变慢
Use of FOR XML AUTO, ROOT('RootName'), TYPE for 14K records makes SQL Query slow
我正在研究存储过程。
它使用视图并将结果集 table 转换为 XML 格式。
我们使用了语句'FOR XML AUTO, ROOT('toxicsite'), TYPE'。
视图返回给我 14k 条记录,在它转换为 XML 之后……需要 2 分钟。
需要另一种选择或如何优化查询转换的帮助
我只是用一个简单的 SELECT TOP 14000 * FROM SomeBigTable
试了一下。 SSMS 在 2 秒后准备就绪。使用 FOR XML AUTO
它 returns 一样快。我不认为创建 XML 需要那么长时间...
如果您的 VIEW
非常复杂,那 AUTO
可能是在骗您。 AUTO
尝试为您的查询找到合适的内部结构(相关数据的嵌套)
作为快速拍摄,您可以尝试FOR XML RAW,TYPE
来检查性能差异。最好的是 FOR XML PATH
的显式方法,您可以在其中自己指定嵌套和关系。
如果涉及 BLOB(VARBINARY
数据),如果涉及很多字符串,尤其是如果它们有很多 非拉丁语字符,你有实体编码的额外成本...
总的来说XML快得惊人...
我正在研究存储过程。 它使用视图并将结果集 table 转换为 XML 格式。 我们使用了语句'FOR XML AUTO, ROOT('toxicsite'), TYPE'。 视图返回给我 14k 条记录,在它转换为 XML 之后……需要 2 分钟。 需要另一种选择或如何优化查询转换的帮助
我只是用一个简单的 SELECT TOP 14000 * FROM SomeBigTable
试了一下。 SSMS 在 2 秒后准备就绪。使用 FOR XML AUTO
它 returns 一样快。我不认为创建 XML 需要那么长时间...
如果您的 VIEW
非常复杂,那 AUTO
可能是在骗您。 AUTO
尝试为您的查询找到合适的内部结构(相关数据的嵌套)
作为快速拍摄,您可以尝试FOR XML RAW,TYPE
来检查性能差异。最好的是 FOR XML PATH
的显式方法,您可以在其中自己指定嵌套和关系。
如果涉及 BLOB(VARBINARY
数据),如果涉及很多字符串,尤其是如果它们有很多 非拉丁语字符,你有实体编码的额外成本...
总的来说XML快得惊人...