优化XQuery投影

时间:2011-03-02 13:03:47

标签: sql-server xml projection xquery

我从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模拟器,过滤就像一个魅力,预测会遇到性能问题。

1 个答案:

答案 0 :(得分:2)

这篇文章非常有用: Performance Optimizations for the XML Data Type in SQL Server 2005

特别建议不要写表格的路径......

/对象[1] /状态[1] /客户ID [1]

你应该改写......

(/对象/状态/客户ID)[1]