Question about simple function folding optimization
От | Stephan Szabo |
---|---|
Тема | Question about simple function folding optimization |
Дата | |
Msg-id | 20030409074051.Y65184-100000@megazone23.bigpanda.com обсуждение исходный текст |
Ответы |
Re: Question about simple function folding optimization
|
Список | pgsql-hackers |
I noticed today (while trying to answer a question) that the following doesn't seem to use the index on reasonably recent sources whereas it seems to have at 7.3.1. create table b1(a int, b text); create function fold_clients(int, text) returns text as 'select $1 || ''_'' || upper($2)' language 'sql' immutable; create index b1ind on b1(fold_clients(a,b)); set enable_seqscan=off; explain select * from b1 where (fold_clients(a,b))='1_A'; Should that work to use the index or was it just a fluke that it worked in the past? I think that it's an issue that the function is being expanded inline (the explain looks like:) QUERY PLAN -------------------------------------------------------------------Seq Scan on b1 (cost=100000000.00..100000032.50 rows=6width=36) Filter: ((((a)::text || '_'::text) || upper(b)) = '1_A'::text) which makes it not realize it can use the index. It's easy to get around for simple functions like this since you can just make a plpgsql function that returns the expression, but we should at least note it in the release notes since it's likely to catch people by surprise.
В списке pgsql-hackers по дате отправления: