是否可以在非物化视图上设置索引?

时间:2016-12-29 21:13:31

标签: postgresql

在PostgreSQL中,我可以在非物化视图上有索引吗?

我在我的应用程序中使用了一个视图,它基本上运行良好,但我想加快对其数据的访问速度。我可以切换到物化视图,但我不想要刷新它。

1 个答案:

答案 0 :(得分:3)

没有

来自http://postgresql.nabble.com/Indexes-not-allowed-on-read-only-views-Why-td4812152.html

  

在postgres中,视图本质上是宏,因此没有数据可以索引

  

普通(非物化)视图没有自己的任何数据,它   在查询期间动态地从一个或多个其他表中提取它   执行。视图的执行类似于a   set-returns函数或子查询,几乎就像你要替换一样   视图定义到原始查询中。

     

这意味着视图将使用原始索引   桌子,但实际上甚至没有机会检查   因为视图的定义是自视的索引   有效地替换成查询。如果视图定义是   足够复杂,它在索引上做了很多工作   原始表没有帮助,每次都必须完成这项工作。

  

CAN 所做的是使用触发器来维护您自己的物化   视图作为常规表,并在您维护的表上具有索引   使用触发器。这在邮件列表中被广泛讨论,而不是   很难做到,尽管使更新与某些人一起表现很好是很棘手的   各种物化视图查询。