我有一个拥有数百万条目的postgres数据库(并且增长速度很快)。我已经创建了该DB的视图,其中每行的某些列被连接并聚合(以这种格式):
concat | count
david55single 5
我正在做的是以这种格式获取字符串,并检查视图是否在视图中确切的字符串,以及计数是什么。这是我的问题:
SELECT count from concatview WHERE concat = '<somestring>';
此查询需要很长时间,因为我们对来自用户的每个请求执行此查询,所以这很糟糕。有没有办法增加查询的时间?根据我从文档中理解的内容,它只能索引物化视图?我是否需要创建物化视图并经常刷新视图,或者是否有其他方法来增强常规视图?
答案 0 :(得分:1)
create index on mytab(col1||col2||col3)
确保在索引中使用与在视图中使用完全相同的语法。如果您使用concat()函数进行连接,则需要创建一个IMMUTABLE版本的concat()(不可变意味着给定相同的输入,它总是返回相同的输出,并且标准concat没有标记为不可变,但在许多用例中它可以安全地包装在一个不可变的函数中)。这将允许针对视图的查询使用索引。
注意:||如果任何列都可以为空,则连接运算符不会很好。