sql-server – 为什么从XML变量中插入选择到变量表这么慢?
我试图将一些
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中解释了性能回归的原因
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |