首页 > 解决方案 > 如果我在查询中两次使用相同的参数调用相同的 postgres 函数,它会计算一次还是两次?

问题描述

如果我在 postgres 中进行以下查询,是计算 ts_rank 两次还是只计算一次?如果计算两次,是否可以让它只计算一次?

SELECT id, name, "createdAt", price, ts_rank(document, to_tsquery(:query)) AS rank
FROM search_index
WHERE document @@ to_tsquery(:query)
ORDER BY ts_rank(document, to_tsquery(:query)) DESC;

标签: postgresqlperformance

解决方案


在这种情况下,它应该只计算一次。Postgres 检测相等的表达式。一般来说,如果你担心这个,那么你可以在子查询中计算表达式。

一些喜欢:

SELECT c1, c1 FROM (SELECT exp AS c1) s;

如果没有全文索引,该功能to_tsquery()非常昂贵。如果您有全文索引,并且如果只有一百条选定的记录,那么开销应该不会很大。ts_rank


推荐阅读