我正在尝试按每行预先计算用户定义的函数。这个想法是我将 JSON 对象作为其中一个字段中的文本对象,我想从中解析出其他一些"字段",这些字段可以像任何其他真实字段一样在查询中返回。但是,解析 JSON 的开销很大。有没有办法以加快查询速度的方式预先计算此解析函数?
请不要争辩说数据库不应该有 JSON 作为文本;我知道利弊。
首先,你可能对即将推出的 PostgreSQL 9.2 的 JSON 数据类型感兴趣(即将发布)。
至于您的问题,您正在寻找一个具体化视图(或更简单的形式:表中的冗余预计算列)。"物化视图"只是既定的术语,而不是PostgreSQL数据库中的特殊对象。基本上,您创建一个具有预先计算值的冗余表,在某些事件中或及时刷新该表。
搜索该术语会给您一些答案。
除了物化视图之外,请记住,PostgreSQL 还可以索引函数的输出,因此您可以执行以下操作:
CREATE INDEX my_foo_bar_udf_idx ON foo (bar(baz));
这仅在 UDF 标记为不可变时有效,这意味着输出仅取决于参数。 这为您提供了一个选项,可以针对查询参数运行函数,然后扫描索引而不是表。 它不能满足所有用例,但它确实满足了其中的许多用例,并且通常可以为您省去实现视图的麻烦。