假设我有一个STABLE SQL函数接受一个参数(函数内部函数对一堆表执行SELECT,但就调用者而言,该函数实际上只是一个黑盒子)。
如果在同一个SELECT语句中使用相同的参数多次调用此函数,PostgreSQL是否足够智能,只能实际调用一次并缓存结果,或者我是否必须使用WITH语句手动执行缓存(公用表)表达式)?
答案 0 :(得分:8)
PostgreSQL没有用于稳定函数结果的缓存(它没有任何函数结果的缓存)。 PostgreSQL尝试最小化调用次数,但它没有缓存。您可以尝试通过更高的COST属性惩罚这些调用。使用WITH应该是个好主意。