この SP (TSQL) を高速化するために、SP (TSQL) に含まれている選択クエリを変更しようとしていました。このクエリの元の実行時間は数分でしたが、このクエリを 2 つの部分に分割すると、実行時間がわずか数秒に短縮されました。定義されたインデックスは変更されておらず、このクエリでも同じインデックスが使用されています。この大幅な改善の正確な原因とその理由を誰か説明してもらえますか?
ありがとうございました。
元のクエリ:
SELECT ( AgentFirstName + ' ' + AgentLastName ) AS AgentName,
AC.Agent_ID,
AC.TimeStamp
INTO #tAgentList
FROM AgentConfiguration AC
JOIN Getpermittedagents(@tenantId, @userName) AS PA
ON AC.Agent_ID = PA.Agent_ID
OR PA.Agent_ID = -1
WHERE AC.TimeStamp < @To
AND AC.Tenant_ID = @tenantId
AND ( EXISTS (SELECT *
FROM AgentsCampaignActivities AS ACA
WHERE AC.AgentGlobal_ID = ACA.AgentGlobal_ID)
OR @IsCampaignReport = 0 )
改善されたクエリ:
SELECT Agent_ID,
AgentFirstName,
AgentLastName,
TimeStamp
INTO #tt
FROM AgentConfiguration
WHERE TimeStamp > @From
AND TimeStamp < @To
AND Tenant_ID = @tenantId
AND ( EXISTS (SELECT *
FROM AgentsCampaignActivities AS ACA
WHERE AgentGlobal_ID = ACA.AgentGlobal_ID)
OR @IsCampaignReport = 0 )
SELECT ( AgentFirstName + ' ' + AgentLastName ) AS AgentName,
tt.Agent_ID,
tt.TimeStamp
INTO #tAgentList
FROM Getpermittedagents(@tenantId, @userName) AS PA
JOIN #tt tt
ON tt.Agent_ID = PA.Agent_ID
OR PA.Agent_ID = -1