【发布时间】:2018-08-14 08:23:02
【问题描述】:
目前,我正在使用以下代码来汇总已审计的固定资产报告。起初,这没问题,3 年后我注意到系统现在非常慢。我重新审视了代码,发现系统运行缓慢的代码。当我删除子字符串部分时,系统运行得更快。这里有什么工作吗?
SELECT
ENTITY
, [ASSET NUMBER]
, [YEAR AUDITED]
, SUM(COUNT) AS AUDITED
, SUBSTRING
(
(
SELECT
', ' + [SCANNED BY].USERNAME
FROM dbo.vwAUDITED as [SCANNED BY]
WHERE vwAUDITED.[ASSET NUMBER] = [SCANNED BY].[ASSET NUMBER]
AND vwAUDITED.ENTITY = [SCANNED BY].ENTITY
AND vwAUDITED.[YEAR AUDITED] = [SCANNED BY].[YEAR AUDITED]
ORDER BY [SCANNED BY].[ASSET NUMBER] FOR XML PATH('')
), 2, 1000
) AS [SCANNED BY]
, MAX(DATE) AS [COMPLETION DATE]
FROM dbo.vwAUDITED
GROUP BY ENTITY
, [ASSET NUMBER]
, [YEAR AUDITED]
【问题讨论】:
-
如果您使用的是 SQL Server 2017,您可以使用
STRING_AGGdocs.microsoft.com/en-us/sql/t-sql/functions/… -
我猜你可以用两个表实例的连接替换子查询。如需更具体的答案,请提供一个生成测试数据的 sql 脚本。
-
用聚合函数
string_agg替换你的substring -
如果 docs.microsoft.com/en-us/sql/relational-databases/…
-
视图的定义对于任何关于性能的建议都是相当关键的。
标签: sql substring sql-server-2014