Re: Partial indexes (was: Re: Indexing a boolean)

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "scott(dot)marlowe" <scott(dot)marlowe(at)ihs(dot)com>
Cc: Sam Barnett-Cormack <s(dot)barnett-cormack(at)lancaster(dot)ac(dot)uk>, PostgreSQL Administrators Mailing List <pgsql-admin(at)postgresql(dot)org>
Subject: Re: Partial indexes (was: Re: Indexing a boolean)
Date: 2003-08-22 14:34:39
Message-ID: 10842.1061562879@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

"scott.marlowe" <scott(dot)marlowe(at)ihs(dot)com> writes:
> Basically, for partial / functional indexes, the create index where clause
> needs to exactly (or nearly so) match the select query's where clause:

Another consideration is that an index declaration like this:

create index fooi on foo (flag) where flag;

is really rather redundant, since the entries will only be made for rows
where flag is true, and so storage of the column value in the index is
useless. You may be able to get more mileage out of the index by making
the index on another column that you often test in conjunction with the
flag. For example:

regression=# create table foo (flag bool, ts timestamp);
CREATE TABLE
regression=# create index fooi on foo(ts) where flag;
CREATE INDEX
regression=# explain select * from foo where ts > '2003-10-11' and flag;
QUERY PLAN
--------------------------------------------------------------------------------
Seq Scan on foo (cost=0.00..22.50 rows=167 width=9)
Filter: ((ts > '2003-10-11 00:00:00'::timestamp without time zone) AND flag)
(2 rows)

regression=# set enable_seqscan TO 0;
SET
regression=# explain select * from foo where ts > '2003-10-11' and flag;
QUERY PLAN
-------------------------------------------------------------------------
Index Scan using fooi on foo (cost=0.00..43.25 rows=167 width=9)
Index Cond: (ts > '2003-10-11 00:00:00'::timestamp without time zone)
Filter: flag
(3 rows)

(In a more realistic situation, the planner would probably have chosen
the indexscan without any prompting.)

regards, tom lane

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Vikram D. Gaitonde 2003-08-22 19:09:00 Disk Utilization Increases And Time for Vacuum Increases.
Previous Message scott.marlowe 2003-08-22 13:48:56 Re: Partial indexes (was: Re: Indexing a boolean)