4

我们的数据库中有一个带有 XML 数据列的表。

在该列中,有一大块 xml 数据,其中存储了许多应用程序值。

在我们更经常调用的查询之一中,在同一个查询中从这个 Xml 列中检索到多个值。例如

SELECT 
    v.OtherColumns --...
    ,v.[Data].value('(/Record//Inputs/Net)[1]', 'money') as 'Input Net'
    ,v.[Data].value('(/Record//Inputs/Vat)[1]', 'money') as 'Input Vat'
    ,v.[Data].value('(/Record//Inputs/Gross)[1]', 'money') as 'Input Gross'
    ,v.[Data].value('(/Record//Outputs/Net)[1]', 'money') as 'Output Net'
    ,v.[Data].value('(/Record//Outputs/Vat)[1]', 'money') as 'Output Vat'
    ,v.[Data].value('(/Record//Outputs/Gross)[1]', 'money') as 'Output Gross'
From 
    Validations as v
    --... remainder of query

对我来说,它看起来必须从该列中读取 6 次数据并解析 6 次。当我查看 Sql Azure Portal 下的查询计划时,这是迄今为止对查询的最大打击...

查询计划

在完整查询中,有约 20 个针对同一列的 XPath 查询,每个查询占约 4.7%。

是否有更优化的方法可以在子查询中检索整个列一次,然后对列的内存内容运行 XPath 查询?

4

1 回答 1

2

尝试使用 XQuery 语句 FLWOR。它应该减少解析时间。请参阅http://msdn.microsoft.com/en-us/library/ms190945.aspx

于 2013-07-08T15:21:03.847 回答