相关疑难解决方法(0)

为什么PostgreSQL多次调用我的STABLE/IMMUTABLE函数?

我正在尝试优化PostgreSQL 9.1.2中的复杂查询,它调用了一些函数.这些函数标记为STABLE或IMMUTABLE,并在查询中使用相同的参数多次调用.我假设PostgreSQL足够智能,只能为每组输入调用一次 - 毕竟,这是STABLE和IMMUTABLE的重点,不是吗?但似乎多次调用这些函数.我写了一个简单的函数来测试它,它证实了这一点:

CREATE OR REPLACE FUNCTION test_multi_calls1(one integer)
RETURNS integer
AS $BODY$
BEGIN
    RAISE NOTICE 'Called with %', one;
    RETURN one;
END;
$BODY$ LANGUAGE plpgsql IMMUTABLE;


WITH data AS
(
    SELECT 10 AS num
    UNION ALL SELECT 10
    UNION ALL SELECT 20
)
SELECT test_multi_calls1(num)
FROM data;
Run Code Online (Sandbox Code Playgroud)

输出:

NOTICE:  Called with 10
NOTICE:  Called with 10
NOTICE:  Called with 20
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况?如何让它只执行一次该功能?

postgresql performance function immutability

16
推荐指数
1
解决办法
5216
查看次数

标签 统计

function ×1

immutability ×1

performance ×1

postgresql ×1