Re: Why is it not using an index?

From: Martijn van Oosterhout <kleptog(at)svana(dot)org>
To: Jean-Luc Lachance <jllachan(at)nsd(dot)ca>
Cc: Gregory Wood <gregw(at)com-stock(dot)com>, Dmitry Tkach <dmitry(at)openratings(dot)com>, PostgreSQL-General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Why is it not using an index?
Date: 2002-03-17 23:55:45
Message-ID: 20020318105545.A24566@svana.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-sql

On Fri, Mar 15, 2002 at 03:25:47PM -0500, Jean-Luc Lachance wrote:
> Really, the PostgreSQL interpreter should be smart enough to figure this
> out by itself...

It is actually, if you put quotes around the number so it is explicitly
typed as 'unknown'. The interpreter will then accuratly match the type.
Without the quotes the number becomes int4 and so a whole promotion/type
hierarchy needs to be built to determine how to relate them.

Just put quotes around all your constants and all your problems are solved.

> Gregory Wood wrote:
> >
> > > explain select * from a where x=3;
> >
> > PostgreSQL is treating 3 as an int4 (integer) type, whereas x is an int2
> > (smallint) type. Try casting the constant as a smallint and it should use
> > the index:
> >
> > explain select * from a where x=3::smallint;
> >
> > Greg
> >
> > ----- Original Message -----
> > From: "Dmitry Tkach" <dmitry(at)openratings(dot)com>
> > To: <pgsql-general(at)postgresql(dot)org(dot)pgsql-sql@postgresql.org>
> > Sent: Friday, March 15, 2002 2:07 PM
> > Subject: [GENERAL] Why is it not using an index?
> >
> > > This must be really simple, but I just can't get it :-(
> > > I have a table (a) with a single column (x):
> > >
> > > Table "a"
> > > Attribute | Type | Modifier
> > > -----------+----------+----------
> > > x | smallint |
> > > Index: a_idx
> > >
> > >
> > > Index "a_idx"
> > > Attribute | Type
> > > -----------+----------
> > > x | smallint
> > > btree
> > >
> > > The table has 10000000 rows....
> > >
> > > Now, how come, when I do:
> > >
> > > explain select * from a where x=3;
> > >
> > > it says:
> > >
> > > Seq Scan on bset (cost=100000000.00..100175934.05 rows=303 width=2)
> > >
> > > Why is it not using a_idx???
> > >
> > > I even tried set enable_seqscan to off - makes no difference :-(
> > >
> > > Any idea what is going on?
> > >
> > > Thanks a lot!
> > >
> > > Dima
> > >
> > >
> > > ---------------------------(end of broadcast)---------------------------
> > > TIP 5: Have you checked our extensive FAQ?
> > >
> > > http://www.postgresql.org/users-lounge/docs/faq.html
> > >
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 5: Have you checked our extensive FAQ?
> >
> > http://www.postgresql.org/users-lounge/docs/faq.html
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

--
Martijn van Oosterhout <kleptog(at)svana(dot)org> http://svana.org/kleptog/
> Ignorance continues to thrive when intelligent people choose to do
> nothing. Speaking out against censorship and ignorance is the imperative
> of all intelligent people.

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Doug McNaught 2002-03-17 23:56:06 Re: cannot read block 39 of pg_attribute_relid_attnam_index: Input/output error
Previous Message Andrew Bartley 2002-03-17 23:53:09 cannot read block 39 of pg_attribute_relid_attnam_index: Input/output error

Browse pgsql-sql by date

  From Date Subject
Next Message Rudi Starcevic 2002-03-18 00:53:52 Re: Boolean test
Previous Message Dima Tkach 2002-03-17 04:07:28 Re: Btree index extension question