gpt4 book ai didi

sql-server - 为什么通过在 SQL 查询中执行所描述的修改可以显着提高性能?

转载 作者:行者123 更新时间:2023-12-03 00:26:43 24 4
gpt4 key购买 nike

我试图修改一个包含在 SP (TSQL) 中的选择查询,以加快该 SP 的速度。该查询的原始运行时间为几分钟,将该查询分为两部分,将运行时间缩短为仅几秒钟。未对定义的索引进行任何更改,并且该查询仍使用相同的索引。有人可以解释一下到底是什么导致了这种显着的改善以及为什么吗?

谢谢。

原始查询:

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

最佳答案

这只是一个假设,可以通过比较执行计划来证实,但关键的区别可能就在这一条: ON AC.Agent_ID = PA.Agent_ID 或 PA.Agent_ID = -1

使用 PA.Agent_ID 上的索引可能会失败。

第一种情况是对所有数据执行,第二种情况是对预过滤集执行。

关于sql-server - 为什么通过在 SQL 查询中执行所描述的修改可以显着提高性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com