- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
运行 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/
我是一名优秀的程序员,十分优秀!