我有一个历史表,它具有主表的事务记录信息,在此表中我使用了XML列来存储该事务信息。包含数据的表结构看起来像。使用Xquery从XMLAttribute获取数据时的性能问题
在内容的XML数据被存储为象下面的XML。
<Answers>
<AnswerSet>
<Answer questionId="ProductCode">S3404</Answer>
<Answer questionId="ProductName">Parabolic Triple</Answer>
<Answer questionId="LegacyOptionID" selectedvalue="1389">1389</Answer>
<Answer questionId="LegacyContentID" selectedvalue="624">624</Answer>
<Answer questionId="LegacyPageID" selectedvalue="355">355</Answer>
<Answer questionId="LegacyParentID" selectedvalue="760">760</Answer>
</AnswerSet>
</Answers>
在所有行结构是相同的,但数据是在回答节点不同,我想其中有产品代码=“S3404”和CreatedDate是新的数据。像
select n2.* from nodehistory n2 CROSS APPLY n2.content.nodes('Answers/AnswerSet') T(c) WHERE c.value('./Answer[@questionId="ProductCode"][1]','varchar(100)') ='J154'
产品代码
我已创建的查询必须为每一个NODEID独特的数据,但这是同样的NODEID返回多行,因为这是交易表,以便同XML可以存储多个时间,为这需要像Created by desc命令那样的条件,但由于我认为XML处理,执行此查询需要更多的时间。
我们可以这样做吗?首先通过CreatedDate desc从NodeHistory顺序获取Select Top 1 nodeid,然后搜索XML部分。
请建议你获得更好的性能