在插入和更新而不是在select上计算聚合

时间:2016-06-06 17:33:31

标签: sql sql-server

在MS Sql Server 2016中,我有一个包含如下所示查询的视图:

SELECT Col1, Col2, MAX(Col3) FROM TableA 
WHERE Col1 = ???
GROUP BY Col1, Col2

我在整个地方都使用这个视图,因此,我的大多数查询看起来都非常低效,不得不在我的系统中的几乎每个SELECT上对TableA进行索引扫描。

我想知道的是,是否有办法存储MAX(Col3),以便在INSERT和UPDATE期间而不是在SELECT期间计算它?

以下是一些想法以及我拒绝它们的原因:

  1. 我不认为我可以在视图上使用聚集索引,因为" MAX(Col3)"不确定。

  2. 我不知道如何使用过滤后的视图。

  3. 我不想使用触发器。

1 个答案:

答案 0 :(得分:0)

我会从索引tableA(col1, col2, col3)开始。

根据表的大小和col1上的匹配数量,这在性能上应该是非常合理的。

否则,您可能需要使用触发器维护的摘要表。