我有一个SQL查询要从视图加载到表中,它现在运行了45分钟以上。我检查了是否存在任何阻塞问题,但这是唯一正在运行的查询,并且我未在目标表中使用任何索引。创建基础视图仅需5分钟。它有500万条记录。
INSERT INTO [dbo].[Table1]
SELECT
Name,
Service = STUFF ((SELECT ',' + Service
FROM Table2 T1
WHERE T1.Resource = T2.Resource
ORDER BY Service
FOR XML PATH('')), 1, 1, ''),
Tag = STUFF ((SELECT ',' + Tag
FROM Table2 T1
WHERE T1.Resource = T2.Resource
ORDER BY Tag
FOR XML PATH('')), 1, 1, ''),
Resource,
MAX(SubjectIdentifier) AS SubjectIdentifier,
DataType
FROM
Table2 T2 WITH (NOLOCK)
GROUP BY
Name, Resource, DataType
如何优化此查询并快速加载它?谢谢
让我假设您不能使用string_agg()
,因为您使用的是旧版本的SQL Server。
我建议稍微重写一下查询,然后添加索引:
SELECT Name,
Service = STUFF((SELECT ',' + TT2.Service
FROM Table2 TT2
WHERE TT2.Resource = T2.Resource
ORDER BY TT2.Service
FOR XML PATH('')
), 1, 1, ''
),
Tag = STUFF((SELECT ',' + TT2.Tag
FROM Table2 TT2
WHERE TT2.Resource = T2.Resource
ORDER BY TT2.Tag
FOR XML PATH('')
), 1, 1, ''
),
Resource,
MAX(SubjectIdentifier) AS SubjectIdentifier,
DataType
FROM (SELECT DISTINCT Name, Resource, DataType
FROM Table2 T2
) T2;
然后,您要在以下位置建立索引:
Table2(Name, Resource, DataType)
Table2(Resource, Service)
Table2(Resource, Tax)
此外,您怀疑按三列进行汇总,但仅在子查询中使用其中一列。我希望所有三个都在子查询中。
还请注意,我限定了all列引用。