我定义了一个自定义函数
CREATE OR REPLACE FUNCTION "public"."div_zeroTest"("a" numeric, "b" numeric)
RETURNS "pg_catalog"."numeric" AS $BODY$
SELECT CASE b
WHEN 0 THEN
0
ELSE
a/b
END;
$BODY$
LANGUAGE sql VOLATILE
COST 100
但是当我使用他时,我发现使用这个函数会使索引enter image description here无效
如果我直接使用casewhen,它仍然会生效enter image description here
为什么会导致这种情况
1条答案
按热度按时间7rtdyuoh1#
没有足够的细节来确定,但作为一般规则,为了使使用函数的查询使用索引,您需要创建expression index并在
where
子句中使用与索引定义相同的表达式。此外,函数必须标记为
immutable
而不是volatile
,因为您的函数显然是纯函数(相同的输入总是会产生相同的输出)。