Search Postgresql Archives

Re: Index on immutable function call

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19 Jan 2010, at 7:40, Philippe Lang wrote:

> Hi,
> 
> I'm trying to figure out how to use an index on an immutable function
> call in order to speed up queries.
> 
> I came up with this small test:
> 
> ----------------------------------------
> --create database foo;
> 
> --drop table indexed_table;
> 
> create table indexed_table (
>  id serial primary key,
>  data1 integer,
>  data2 integer
> );
> 
> create or replace function this_is_a_long_transformation(d integer)
> returns integer as $$
>  declare
>    l	integer;
>  begin
>    -- wait
>    l = 0;
>    while l < 100 loop
>      l = l + 1;
>    end loop;
>    -- return same value
>    return d;
>  end
> $$
> language plpgsql immutable;
> 
> -- insert data into table
> insert into indexed_table
>  select
>    i,
>    cast((select random() * 1000 * i) as integer),
>    cast((select random() * 1000 * i) as integer)
>  from generate_series(1, 100000) as i;
> 
> -- create index
> create index long_transformation_index on indexed_table
> (this_is_a_long_transformation(data2));
> 
> --select * from indexed_table WHERE data1 > data2; 
> select * from indexed_table WHERE data1 >
> this_is_a_long_transformation(data2);
> ----------------------------------------
> 
> My goal is to make query...
> 
>  select * from indexed_table WHERE data1 >
> this_is_a_long_transformation(data2);
> 
> ... as fast as
> 
>  select * from indexed_table WHERE data1 > data2;
> 
> ... with the help of the index "long_transformation_index".
> 
> 
> Unfortunately, Postgreql does not use the index at all.
> 
> What am I doing wrong? I use the default query tuning options of
> Postgresql 8.3.7.


Did you analyse the table?
Can you show us an explain analyse?

What I notice off-hand is that you don't appear to have an index on data1, so Postgres doesn't know for which rows that is > some_immutable_function(data2).

Alban Hertroys

--
Screwing up is the best way to attach something to the ceiling.


!DSPAM:737,4b5579a310607798915529!



-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux