SQL中Avg和Max的性能

时间:2019-06-18 12:22:28

标签: sql sql-server max average

我想减少以下查询的查询执行时间。 此查询大约需要1分20秒,大约2k条记录。

表中的记录数:1348474

通过查询查询处理的记录数:25000

返回的记录数:2152

SELECT Col1, Col2,
ISNULL(AVG(Col3),0) AS AvgCol,
ISNULL(MAX(Col3),0) AS MaxCol,
COUNT(*) AS Col5
FROM TableName WITH(NOLOCK)
GROUP BY Col1, Col2
ORDER BY Col1, MaxCol DESC

我尝试卸下AVG和MAX色谱柱,并将其降低至1秒。 是否有相同的优化解决方案? 除了主键之外,我没有其他索引。

更新

添加的索引: 位于PRIMARY-Col1上的非群集

非集群位于PRIMARY-Col2

位于PRIMARY-ID上的集群唯一主键

======

在此先感谢。.祝您编码愉快!

1 个答案:

答案 0 :(得分:1)

对于此查询:

SELECT Col1, Col2,
       COALESCE(AVG(Col3), 0) AS AvgCol,
       COALESCE(MAX(Col3), 0) AS MaxCol,
       COUNT(*) AS Col5
FROM TableName
GROUP BY Col1, Col2
ORDER BY Col1, MaxCol DESC;

我将从(Col1, Col2, Col3)上的索引开始。

我不确定这是否有帮助。问题可能是订购结果的时间。