在MS Sql Server 2016中,我有一个包含如下所示查询的视图:
SELECT Col1, Col2, MAX(Col3) FROM TableA
WHERE Col1 = ???
GROUP BY Col1, Col2
我在整个地方都使用这个视图,因此,我的大多数查询看起来都非常低效,不得不在我的系统中的几乎每个SELECT上对TableA进行索引扫描。
我想知道的是,是否有办法存储MAX(Col3),以便在INSERT和UPDATE期间而不是在SELECT期间计算它?
以下是一些想法以及我拒绝它们的原因:
我不认为我可以在视图上使用聚集索引,因为" MAX(Col3)"不确定。
我不知道如何使用过滤后的视图。
我不想使用触发器。
答案 0 :(得分:0)
我会从索引tableA(col1, col2, col3)
开始。
根据表的大小和col1
上的匹配数量,这在性能上应该是非常合理的。
否则,您可能需要使用触发器维护的摘要表。