Re: Using BOOL in indexes - Mailing list pgsql-hackers

From Andrew McMillan
Subject Re: Using BOOL in indexes
Date
Msg-id 39348E8B.1684188A@catalyst.net.nz
Whole thread Raw
In response to RE: Using BOOL in indexes  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
Responses RE: Using BOOL in indexes  ("Hiroshi Inoue" <Inoue@tpf.co.jp>)
List pgsql-hackers
Hiroshi Inoue wrote:
> Hiroshi Inoue wrote:
> > Andrew McMillan wrote:
> > >
> > > Hi,
> > >
> > > I'm trying to convert an application from MS SQL / ASP / IIS to
> > > PostgreSQL / PHP / Apache.  I am having trouble getting efficient
> > > queries on one of my main tables, which tends to have some fairly large
> > > records in it.  Currently there are around 20000 records, and it looks
> > > like they average around 500 bytes from the VACUUM ANALYZE statistics
> > > below.
> > >
> > > I don't really want any query on this table to return more than about 20
> > > records, so it seems to me that indexed access should be the answer, but
> > > I am having some problems with indexes containing BOOLEAN types.
> > >
> > > I can't see any reason why BOOL shouldn't work in an index, and in other
> > > systems I have commonly used them as the first component of an index,
> > > which is what I want to do here.
> > >
> > > Also, I can't see why the estimator should see a difference between
> > > "WHERE head1" and "WHERE head1=TRUE".
> > >
> > >
> > > newsroom=# explain SELECT DISTINCT story.story_id, written, released,
> > > title, precis, author, head1 FROM story WHERE head1 ORDER BY written
> >
> > Please add head1 to ORDER BY clause i.e. ORDER BY head1,written.
> >
> 
> Sorry,it wouldn't help unless there's an index e.g. on (head1,written,
> story_id, released, title, precis, author).
> However isn't (story_id) a primary key ?
> If so,couldn't you change your query as follows ?
> 
> SELECT story.story_id, written, released, title, precis, author, head1
> FROM story WHERE head1=TRUE ORDER BY head1, written DESC
> LIMIT 15.

Thanks Hiroshi,

I already have such an index, but as you can see below, it is still not
used:

newsroom=# explain SELECT story.story_id, written, released, title,
precis, author, head1 FROM story WHERE head1=TRUE ORDER BY head1,
written DESC LIMIT 15;
NOTICE:  QUERY PLAN:

Sort  (cost=2669.76..2669.76 rows=14007 width=49) ->  Seq Scan on story  (cost=0.00..1467.46 rows=14007 width=49)

EXPLAIN
newsroom=# \d story_sk4  Index "story_sk4"Attribute |   Type    
-----------+-----------head1     | booleanwritten   | timestamp
btree

Regards,                Andrew.

-- 
_____________________________________________________________________           Andrew McMillan, e-mail:
Andrew@cat-it.co.nz
Catalyst IT Ltd, PO Box 10-225, Level 22, 105 The Terrace, Wellington
Me: +64 (21) 635 694, Fax: +64 (4) 499 5596, Office: +64 (4) 499 2267


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: Applying TOAST to CURRENT
Next
From: "Hiroshi Inoue"
Date:
Subject: RE: Using BOOL in indexes