Performance PostgreSQL性能-检查返回布尔值的函数中是否存在行
我试图在PostgreSQL中创建一个函数,如果存在一行,它将返回Performance PostgreSQL性能-检查返回布尔值的函数中是否存在行,performance,postgresql,Performance,Postgresql,我试图在PostgreSQL中创建一个函数,如果存在一行,它将返回true或false。SQL非常简单,性能也很好: SELECT exists (SELECT 1 FROM Users u WHERE u.id = $1) 但是,当我尝试使用此代码创建函数时,性能非常糟糕: CREATE OR REPLACE FUNCTION userExist(userId integer) RETURNS boolean AS $$ SELECT exists (SELECT 1 F
true
或false
。SQL非常简单,性能也很好:
SELECT exists (SELECT 1
FROM Users u
WHERE u.id = $1)
但是,当我尝试使用此代码创建函数时,性能非常糟糕:
CREATE OR REPLACE FUNCTION userExist(userId integer)
RETURNS boolean AS $$
SELECT exists (SELECT 1
FROM User u
WHERE u.id = $1);
$$ LANGUAGE sql STABLE;
我这样称呼这个函数:
EXPLAIN ANALYZE SELECT * FROM userExist(1);
这个问题似乎与我之前提出的一个问题()相同,但我上次得到的答案在这种情况下不起作用。您有一个标量函数,它返回单个值。不要把它放在
from
子句中,使用selectuserexist(1)
Ok,否则无论是否使用from
,性能都完全相同。您有一个标量函数,返回单个值。不要把它放在from
子句中,使用selectuserexist(1)代码>正常,否则无论是否使用来自的