我有一张25,000行的表。表审计(Id int identity(1,1),AdditionalInfo xml) AdditionalInfo列中的行样本数据如下所示
<Audit version="1">
<Context name="Event">
<Action name="OrganizationEventReceived">
<Input>
<Source type="SourceOrganizationId">77d2678b-ea4a-43ad-816b-c63edf206b08</Source>
<Target type="TargetOrganizationId">b98fd3ae-dbcb-4826-9d92-7e445ad61273,b98fd3ae-dbcb-4826-9d92-7e445ad61273,b98fd3ae-dbcb-4826-9d92-7e445ad61273</Target>
</Input>
</Action>
</Context>
</Audit>
我喜欢粉碎xml并使用以下查询收集输出数据集中的数据。
SELECT Id,
p.value('(@name)[1]', 'nvarchar (100)') AS TargetAction,
p.value('(Input/Source/text())[1]', 'nvarchar (500)') AS Source,
p.value('(Input/Target/text())[1]', 'nvarchar (max)') AS Target
FROM dbo.Audit CROSS APPLY AdditionalInfo.nodes('/Audit/Context/Action') AS AdditionalInfo(p)
查询的性能很差。只需15秒即可为25,000行提供结果集。有没有更好的方法来做到这一点。我甚至尝试在AdditionalInfo列上放置主要和辅助xml索引。请帮助并告诉我,使用更好的sql server xquery技术。
谢谢,