我需要修改存储在大约62m行的SQL Server表中的XML数据。
我正在使用以下查询来执行此操作,这是query plan。
=query(query(A:F,"where D is not NULL order by A desc limit 7"),"order by Col1")
它已经运行了24个小时以上,并且似乎没有显示任何进度。有没有更好的方法来修改SQL Server中的XML(除了显然不将XML存储在SQL Server中!:)
XML索引对您有帮助吗?
答案 0 :(得分:1)
如果大约有6200万行,那么更新所有这些行显然将需要一些时间。
但是您可以通过添加WHERE子句来使UPDATE查询可重复,该子句检查XML字段中是否存在标记。
如果该XML没有任何更改,它将不会更新XML。
您实际上并不需要使用FROM,尽管这可能不会对性能产生影响。
UPDATE [Customer].[CorrespondenceLog]
SET
XMLContent.modify('delete //account/correspondence/contact[1]')
WHERE XMLContent.exist('//account/correspondence/contact[1]') = 1
如果分批执行此操作,则在另一个非XML字段上建立索引可能会很有用。
例如,如果某个日期字段上有一个索引(或分区?),并且您要更新日期范围。
添加XML index可以在某种程度上帮助查找包含标签的XML。
但是不确定仅删除标签是否值得。
CREATE PRIMARY XML INDEX PIdx_CorrespondenceLog_XMLContent
ON [Customer].[CorrespondenceLog]([XMLContent]);
CREATE XML INDEX PIdx_CorrespondenceLog_XMLContent_PATH
ON [Customer].[CorrespondenceLog]([XMLContent])
USING XML INDEX PIdx_CorrespondenceLog_XMLContent FOR PATH;
db <>提琴here