我们的数据库中有一个带有 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 查询?