Re: Why isn't this index being used?

From: "Knutsen, Mark" <Mark(dot)Knutsen(at)nasdaq(dot)com>
To: "Doug Y" <dylists(at)ptd(dot)net>
Cc: pgsql-performance(at)postgresql(dot)org
Subject: Re: Why isn't this index being used?
Date: 2004-10-19 15:33:50
Message-ID: C6317ED2939D684C9FBE85D574CC5E620896949A@mer-exch1.corp.nasdaq.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

(Why don't replies automatically go to the list?)

Sure enough, quoting the constants fixes the problem.

Is it a best practice to always quote constants?

> -----Original Message-----
> From: Doug Y [mailto:dylists(at)ptd(dot)net]
> Sent: Tuesday, October 19, 2004 11:28 AM
> To: Knutsen, Mark
> Cc: pgsql-performance(at)postgresql(dot)org
> Subject: Re: [PERFORM] Why isn't this index being used?
>
> Hi, I ran into a similar problem using bigints...
>
> See:
> http://www.postgresql.org/docs/7.3/static/datatype.html#DATATYPE-INT
>
> small & big int have to be cast when used in querries... try:
> explain select * from db where type=90::smallint and
> subtype=70::smallint and date='7/1/2004';
> or
> explain select * from db where type='90' and subtype='70' and
> date='7/1/2004';
>
> Knutsen, Mark wrote:
>
> > The following is from a database of several hundred million rows of
> > real data that has been VACUUM ANALYZEd.
> >
> >
> >
> > Why isn't the index being used for a query that seems tailor-made
for
> > it? The results (6,300 rows) take about ten minutes to retrieve with
a
> > sequential scan.
> >
> >
> >
> > A copy of this database with "integer" in place of "smallint", a
> > primary key in column order (date, time, type, subtype) and a
> > secondary index in the required order (type, subtype, date, time)
> > correctly uses the secondary index to return results in under a
second.
> >
> >
> >
> > Actually, the integer version is the first one I made, and the
> > smallint is the copy, but that shouldn't matter.
> >
> >
> >
> > Postgres is version "postgresql-server-7.3.4-3.rhl9" from Red Hat
Linux
> 9.
> >
> >
> >
> > =====
> >
> >
> >
> > testdb2=# \d db
> >
> > Table "public.db"
> >
> > Column | Type | Modifiers
> >
> > ---------+------------------------+-----------
> >
> > date | date | not null
> >
> > time | time without time zone | not null
> >
> > type | smallint | not null
> >
> > subtype | smallint | not null
> >
> > value | integer |
> >
> > Indexes: db_pkey primary key btree ("type", subtype, date, "time")
> >
> >
> >
> > testdb2=# set enable_seqscan to off;
> >
> > SET
> >
> >
> >
> > testdb2=# explain select * from db where type=90 and subtype=70 and
> > date='7/1/2004';
> >
> > QUERY PLAN
> >
> >
------------------------------------------------------------------------
> ------
> >
> > Seq Scan on db (cost=100000000.00..107455603.76 rows=178 width=20)
> >
> > Filter: (("type" = 90) AND (subtype = 70) AND (date =
> > '2004-07-01'::date))
> >
> > (2 rows)

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Max Baker 2004-10-19 15:38:21 Vacuum takes a really long time, vacuum full required
Previous Message Doug Y 2004-10-19 15:28:16 Re: Why isn't this index being used?