在PostgreSQL中,我可以在非物化视图上有索引吗?
我在我的应用程序中使用了一个视图,它基本上运行良好,但我想加快对其数据的访问速度。我可以切换到物化视图,但我不想要刷新它。
答案 0 :(得分:3)
来自http://postgresql.nabble.com/Indexes-not-allowed-on-read-only-views-Why-td4812152.html
在postgres中,视图本质上是宏,因此没有数据可以索引
和
普通(非物化)视图没有自己的任何数据,它 在查询期间动态地从一个或多个其他表中提取它 执行。视图的执行类似于a set-returns函数或子查询,几乎就像你要替换一样 视图定义到原始查询中。
这意味着视图将使用原始索引 桌子,但实际上甚至没有机会检查 因为视图的定义是自视的索引 有效地替换成查询。如果视图定义是 足够复杂,它在索引上做了很多工作 原始表没有帮助,每次都必须完成这项工作。
和
您 CAN 所做的是使用触发器来维护您自己的物化 视图作为常规表,并在您维护的表上具有索引 使用触发器。这在邮件列表中被广泛讨论,而不是 很难做到,尽管使更新与某些人一起表现很好是很棘手的 各种物化视图查询。