我有一个包含20亿行的表,其中一列包含XML数据。实际上我正在编写一个SQL来从XML列中提取数据广告填充到另一个表中。它真的需要很多时间..每秒处理3k行。 我的XML查询有大约30列,主要是使用xpath语句提取数据,如下所示。我使用的是SQL Server 2012标准版,因此无法进行表格分区。
我的sql如下所示。你能否提出一些如何提高绩效的建议。
SELECT Id,
a1 = CASE SortOrder
WHEN 0 THEN Contents.value('(/a/Code)[1]', 'varchar(255)')
ELSE NULL END,
a2 = CASE SortOrder
WHEN 1 THEN Contents.value('(/a/Code)[1]', 'varchar(255)')
ELSE NULL END,
a3 = Contents.value('(/b/c)[1]', 'varchar(255)'),
a4 = Contents.value('(/d/e/f[@category="aa"]/@categoryDate)[1]', 'datetimeOffset'),
a5 = Convert(varchar(max),STUFF((SELECT ',' + OTH.value('(.)', 'varchar(150)')
FROM Contents.nodes('/d/e/f[@category="g"]/SelectedCategories/SelectedCategory') AS Node(OTH) FOR XML PATH('')), 1, 1, '')) + ' & '
+ ISNULL(Contents.value('(/d/e/f[@category="g"]/Freeform)[1]', 'varchar(255)'), ' ' )
FROM tbl
添加主XML索引可能有帮助吗?