Enrico Weigelt <[EMAIL PROTECTED]> writes: > c) CREATE FUNCTION id2username(oid) RETURNS text > LANGUAGE 'SQL' IMMUTABLE AS ' > SELECT username AS RESULT FROM users WHERE uid = $1';
This is simply dangerous. The function is *NOT* immutable (it is stable though). When ... not if ... your application breaks because you got the wrong answers, you'll get no sympathy from anyone. The correct question to ask was "if I make a stable function like this, is it likely to be faster than the join?". The answer is "probably not; at best it will be equal to the join". The best the planner is likely to be able to do with the function-based query is equivalent to a nestloop with inner indexscan (assuming there is an index on users.uid). If that's the best plan then the join case should find it too ... but if you are selecting a lot of items rows then it won't be the best plan. regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match