我从Sql Server中的XQuery投影中获得了一些可怕的性能。 编写以下转换的最佳方法是什么?
select DocumentData.query(
'<object type="dynamic">
<state>
<OrderTotal type="decimal">
{fn:sum(
for $A in /object[1]/state[1]/OrderDetails[1]/object/state[1]
return ($A/ItemPrice[1] * $A/Quantity[1]))}
</OrderTotal>
<CustomerId type="guid">
{xs:string(/object[1]/state[1]/CustomerId[1])}
</CustomerId>
<Details type="collection">
{/object[1]/state[1]/OrderDetails[1]/object}
</Details>
</state>
</object>') as DocumentData
from documents
(我知道代码有点脱离背景)
如果我检查此代码的执行计划,那么大约有10个以上的连接正在进行中。 我应该将其分解为结构中每个级别的$ var吗?
有关更多上下文,这是我正在努力实现的目标: http://rogeralsing.com/2011/03/02/linq-to-sqlxml-projections/
我正在写一个“Linq to XQuery translator”/ NoSQL Document DB模拟器,过滤就像一个魅力,预测会遇到性能问题。
答案 0 :(得分:2)
这篇文章非常有用: Performance Optimizations for the XML Data Type in SQL Server 2005
特别建议不要写表格的路径......
/对象[1] /状态[1] /客户ID [1]
你应该改写......
(/对象/状态/客户ID)[1]