当数据频繁更改时创建索引视图是否有意义?

Makes it sense to create an indexed view when the data is frequently changed?

我有大约 5 个表,每个表中都有超过 1,000,000 个数据集。

我读过有关索引视图的信息,它们可以提高连续查询的性能。但是 tables/the 数据是连续更新的,分别是视图背后的语句只是 returns 数据集的一小部分不时(有时每小时一次,但它可能每天或每周都在变化,它会波动).

在每个表上创建索引并不聪明,因为数据会越来越大,索引会比数据本身更大(开玩笑,但在这种情况下确实不聪明)

那么,您对我有什么建议可以帮助我实现创建一个性能足以在每次需要数据时击败普通语句的视图的目标。

这不是一个明确的答案,只是一些需要考虑的一般想法。

一个重要的信息是 5 个基础 table 有什么索引。如果这些索引对视图有帮助,那么查询优化器将使用它们,因此视图上的索引可能不会使视图更快。

仅根据您提供给我们的信息,主要问题是业务需求,这将有助于确定您的数据库架构:table 更新的频率,视图的更新频率查询,更新和视图查询需要执行多快,以及视图数据需要多快。

  1. 如果视图查询性能比table更新速度更重要,那么使用索引视图。

  2. 如果视图数据可以缓存但不是最新的,并且如果 table 更新速度很重要,那么您可以定期将所有 table 数据复制到一个报告 table,例如每天或每小时一次。在该报告 table 上,您可以创建用于快速读取查询的索引。

  3. 如果视图性能不重要,但视图数据必须是最新的,如果 table 更新速度很重要,那么您可能必须使用非索引视图,并且可能依赖 table 扫描每个视图查询。