![]() |
1
55
在遇到一个非常类似的问题时偶然发现了这个问题,在最终放弃之前,我已经运行了一个查询处理一个7.5MB的XML文件(大约10000个节点)大约3.5~4个小时。
这对性能的提高有什么好处! 创建架构的代码:
创建具有类型化XML列的表的代码:
创建索引的代码
另外,我会得到一个错误:
发现处理此问题的最佳方法是使用外部应用程序对XML执行“外部连接”。
希望这能帮助到别人,因为这是我的一天。 |
![]() |
2
5
解释见下面的链接。 例子:
|
![]() |
3
3
为了加快速度,可以创建XML索引。您可以专门为以下对象设置索引: |
![]() |
4
3
我们这里也有类似的问题。我们的DBA(SP,你就是那个人)查看了我的代码,对语法做了一些调整,我们得到了我们期望的速度。这是不寻常的,因为我从XML中选择的速度非常快,但插入速度非常慢。因此,请尝试以下语法:
因此,指定text()参数似乎真的能提高性能。将我们插入的2K行从“我一定写错了-让我停下来”改为大约3秒。这比我们在连接中运行的原始insert语句快2倍。 |
![]() |
5
2
我不认为这是“最佳”解决方案,但我已经为此编写了一个通用的SQL CLR过程——它采用“表格”Xml结构(如for Xml RAW返回的结构)并输出一个结果集。 它不需要对Xml中“表”的结构进行任何定制/了解,而且速度非常快/效率非常高(尽管这不是设计目标)。我只是在20秒内切碎了一个25MB(非类型化)的xml变量,返回了一个相当宽的表中的25000行。 |
![]() |
6
1
这不是一个答案,更多的是对这个问题的补充——我刚刚遇到了同样的问题,我可以给出edg在评论中要求的数字。 我的测试使用xml,结果插入了244条记录,因此插入了244个节点。 我正在重写的代码平均运行时间为0.4秒。(运行10个测试,从.56秒扩展到.344秒)性能不是重写代码的主要原因,但新代码需要同样或更好的性能。这段旧代码循环xml节点,调用sp在每个循环中插入一次
使用新代码切换的测试表明,新sp平均需要3.7秒,几乎慢了10倍。
我将不得不放弃这段代码,我认为任何优化都无法克服这种方法固有的缓慢。我将尝试sp_xml_preparedocument/OPENXML方法,看看它的性能是否更好。如果有人在web搜索中遇到这个问题(就像我一样),我强烈建议您在SQL Server中使用这种类型的分解之前进行一些性能测试 |
![]() |
7
0
|
![]() |
8
0
显然存在一些缺陷,比如不必要地使用数据集,然后首先将整个文档加载到内存中。我想在将来更进一步,实现我自己的IDataReader来绕过DataSet方法,但目前DataSet对于这项工作来说“足够好”。 基本上,我从来没有找到一个解决我最初的问题的方法,即那种XML分解的性能很慢。它可能很慢,因为类型化xml查询本身就很慢,或者与事务和SQL Server日志有关。我猜类型化xml函数从来都不是为处理非平凡的节点大小而设计的。 是 虽然速度很快,但我在64位环境下使用COM dll时遇到了麻烦,我通常会尽量避免使用不再受支持的COM dll。
|
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 2 年前 |