出于某种原因,我很难接触到一些使用Postgres视图的人,因为你会使用一张桌子,这是一个坏主意。
作为一些背景,有许多表包含完全静态数据,每隔几个月通过批量导入到不同的表 - 日期 - table_201603或table_201607。然后创建了一个名为“table”的视图,客户端随后使用该视图只是表的“SELECT * FROM”。将更新的一批数据放入新表时,视图将更新为指向新表。这意味着不需要对表进行就地重命名,这可能意味着停机时间。这是在9.3之前的Postgres版本中,其中提供了物化视图,只是为了澄清。这些表通常有大约1亿行。
当人们以非常不一致的查询时间查询这些视图时,这可以理解地导致一些令人困惑的结果。有时查询需要几秒钟,其他时间需要20或30毫秒。
附加:这是地理空间数据,因此他们在视图上进行地理空间查询。
我知道这里有很多陷阱 - 视图是像子查询一样即时创建的,你非常喜欢查询规划器关于什么谓词被打倒以及结果多长时间缓存,因为结果没有物理存储为表 - 但任何人都可以看到其他任何东西,并建议一个更好的方法来做到这一点?我可以想象这将是一个相当普遍的情况,所以它可能会帮助其他人。
谢谢,
答案 0 :(得分:0)
一般来说,这会让我想起同义词的用例。但是,Postgres中没有同义词,他们建议使用视图和/或按模式分离
{{3 }}$mo6$1@ger.gmane.org