i具有以下访问查询,并且效果很好。但是,在现在大约700张记录的桌子上完成大约需要8-10秒的时间。FROM
是另一个查询时间很少的查询。我将其范围缩小到MAX()
函数,因为当我删除该功能时,它在很少的查询时间内运行。我该怎么做才能加快这一点?我将假设随着更多数据进入数据库,查询时间的时间越长。
SELECT FirstName, LastName, TeamID, MAX(total) AS totalMax
FROM attendanceViewAll
WHERE TeamID IN(5,9,13)
GROUP BY FirstName, LastName, TeamID
这是子查询,基本上是从表中选择一堆数据。这在不到一秒钟的时间内发生。此查询的结果是按日期和agentID
订购的所有内容。然后,我使用上述查询查找MAX(total)
,以便我可以将代理分组以进行摘要。我也将以下查询用于其他报告。
SELECT
a1.TeamID,
a1.FirstName,
a1.LastName,
a1.incurredDate,
a1.points,
a1.OneFallOff,
a1.TwoFallOff,
(select sum(a2.actualPoints)
from attendanceView as a2 where a2.agentID = a1.agentID and a2.incurredDate <= a1.incurredDate) as total,
a1.comment, a1.linked, a1.FallOffDate
FROM attendanceView as a1;
您的[atcationViewall]查询正在使用相关的子查询来产生运行总数(参考:您以前的问题在此处)。现在,您要求该运行总数的最大值()与[TwoFalloff]值的sum()相同。也就是说
incurredDate TwoFallOff total
------------ ---------- -----
2014-01-10 2 2
2014-01-11 3 5
2014-01-12 1 6
max(总数)与sum(TwoFalloff)相同。最大的区别是要获得[总数]的每个值,您需要运行相关的子查询,而要获得[Twofalloff]的每个值。
换句话说,我怀疑您的当前查询很慢,因为Max()正在强迫[ActinanceViewall]中的相关子查询多次执行。如果您的当前查询直接返回[atcationView]和sum()[twofalloff]值。
您需要的是多列索引,它几乎应该是瞬时的。
使用该界面,因为此链接描述了是否需要帮助。但是,您的索引应首先在标准上,在组中使用的字段中的次要,因此我将在
上有一个索引teamId,firstName,lastname