加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 为什么从XML变量中插入选择到变量表这么慢?

发布时间:2020-12-12 16:44:50 所属栏目:MsSql教程 来源:网络整理
导读:我试图将一些 XML文档中的数据插入到变量表中.我的想法是,同样的select-into(bulk)在任何时候运行,而insert-select需要老化,并且在查询执行时,SQL Server进程对于100%的CPU使用负责. 我看了执行计划和INDEED有差别.插入选择添加一个额外的“表假脱机”节点,
我试图将一些 XML文档中的数据插入到变量表中.我的想法是,同样的select-into(bulk)在任何时候运行,而insert-select需要老化,并且在查询执行时,SQL Server进程对于100%的CPU使用负责.

我看了执行计划和INDEED有差别.插入选择添加一个额外的“表假脱机”节点,即使它不分配成本. “表值函数[XML Reader]”得到92%.通过选择,两个“表值函数[XML Reader]”分别得到49%.

请解释“为什么这是发生”和“如何解决(优雅)”,因为我可以批量插入临时表,然后插入变量表,但这只是令人毛骨悚然.

我在SQL 10.50.1600,10.00.2531上尝试了相同的结果

这是一个测试用例:

declare @xColumns xml
declare @columns table(name nvarchar(300))

if OBJECT_ID('tempdb.dbo.#columns') is not null drop table #columns

insert @columns select name from sys.all_columns

set @xColumns = (select name from @columns for xml path('columns'))

delete @columns

print 'XML data size: ' + cast(datalength(@xColumns) as varchar(30))

--raiserror('selecting',10,1) with nowait

--select ColumnNames.value('.','nvarchar(300)') name
--from @xColumns.nodes('/columns/name') T1(ColumnNames)

raiserror('selecting into #columns',1) with nowait

select ColumnNames.value('.','nvarchar(300)') name
into #columns
from @xColumns.nodes('/columns/name') T1(ColumnNames)

raiserror('inserting @columns',1) with nowait

insert @columns
select ColumnNames.value('.','nvarchar(300)') name
from @xColumns.nodes('/columns/name') T1(ColumnNames)

感谢一堆!

解决方法

这是SQL Server 2008中的一个错误.
使用
insert @columns 
select ColumnNames.value('.','nvarchar(300)') name
from @xColumns.nodes('/columns/name') T1(ColumnNames)
OPTION (OPTIMIZE FOR ( @xColumns = NULL ))

这个解决方法是从Microsoft Connect Site上的一个项目,还提到了一个修复程序,这个Eager Spool / XML Reader问题是可用的(在traceflag 4130).

a different connect item中解释了性能回归的原因

The spool was introduced due to a general halloween protection logic (that is not needed for the XQuery expressions).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读