gpt4 book ai didi

sql-server - FOR XML ... TYPE 比 FOR XML 慢多少?

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:17 28 4
gpt4 key购买 nike

运行 SQL Server 2014。我有一个返回相当大的 XML 的存储过程。它是这样的:

SELECT(
...
FOR XML PATH (N''), ROOT, TYPE

现在,该查询在 1 秒内运行。如果我删除 TYPE,它会在大约一半的时间内运行:

SELECT(
...
FOR XML PATH (N''), ROOT

显然,后者返回一个 nvarchar(max) 而不是 xml。我想要 xml 数据,但如果我要求 xml,它会变慢!如果我想在客户端获取 xml 数据,是否真的需要使用上面的 TYPE 指令将其转换为 xml?

问:无论如何,为什么 FOR XML ... TYPE 显着FOR XML ...?有什么办法可以提高转化率吗?

最佳答案

您是否尝试将结果设置为 XML 和 VARCHAR(MAX) 变量而不显示它们?也许您测量的时差必然会为观看者做好准备?将首字母粘贴到网格列中比创建格式正确、缩进、可显示的 XML 更快...

在大多数情况下不需要指定“TYPE”。您确实需要仅使用嵌套 XML。只需使用别名、PATH 和 ROOT 文字,当然还有 TYPE 或不使用:

而且 - 非常重要! - 尝试使用周围的 SELECT 来调用它,而不是:

SELECT 
(
SELECT tbls.TABLE_NAME AS [@TableName]
,(
SELECT COLUMN_NAME AS [@ColumName]
FROM INFORMATION_SCHEMA.COLUMNS AS cols
WHERE cols.TABLE_NAME=Tbls.TABLE_NAME
FOR XML PATH('COLUMN') /*,TYPE*/
) /*AS alias*/
FROM INFORMATION_SCHEMA.TABLES AS Tbls
FOR XML PATH('TABLE'),ROOT('ALL_TABLES') /*,TYPE*/
) /*AS alias*/

我不知道您如何继续使用生成的 XML。如果您将它传输到您的应用程序,它无论如何都将是一个纯字符串。

结论:采用更快的方法:-)

顺便...

我不知道你的存储过程以及除了 SELECT 之外还做了什么......

在大多数情况下,仅使用 SP 来读取数据是一个坏习惯。

如果您的 SP 不仅仅是您的 SELECT 的包装器,您应该考虑一个(单语句!)表值函数来检索您的数据。

此函数很容易查询并转换为 XML

SELECT *
FROM dbo.MyFunction(/*Parameters*/)
FOR XML PATH('TheRowsName'),ROOT('TheRootName') [,TYPE]

或者 - 如果您每次都需要它作为 XML,您可以定义一个传递 XML 或 VARCHAR(MAX) 的标量函数。函数的可重用性比 SP 好得多...

关于sql-server - FOR XML ... TYPE 比 FOR XML 慢多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658496/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com