优化 XQuery 投影

发布于 2024-10-20 02:14:33 字数 1062 浏览 4 评论 0原文

我从 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 转换器”/NoSQL Document DB 模拟器,过滤工作起来就像一个魅力,投影遇到性能问题。

I'm getting some horrific performance from an XQuery projection in Sql Server.
What would be the best way to write the following transformation?

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

(I know the code is a bit out of context)

If I check the executionplan for this code, there is about 10+ joins going on.
Should I break this down to use for $var for each level in the structure?

For more context, this is what I'm trying to accomplish:
http://rogeralsing.com/2011/03/02/linq-to-sqlxml-projections/

I'm writing a "Linq to XQuery translator" / NoSQL Document DB emulator, filtering works like a charm, projections suffer from perf problems.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

紅太極 2024-10-27 02:14:33

这篇文章非常有用:
SQL Server 2005 中 XML 数据类型的性能优化

特别建议不要写...

/object[1]/state[1]/CustomerId[1]

形式的路径,而应该写...

(/object/state/CustomerId)[1]

This article is quite useful:
Performance Optimizations for the XML Data Type in SQL Server 2005

In particular it recommends that instead of writing paths of the form...

/object[1]/state[1]/CustomerId[1]

you should instead write...

(/object/state/CustomerId)[1]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文