Not using index on VERY simple query

From: "Jeffrey W(dot) Baker" <jwbaker(at)acm(dot)org>
To: <pgsql-general(at)postgresql(dot)org>
Subject: Not using index on VERY simple query
Date: 2001-10-08 20:34:00
Message-ID: Pine.LNX.4.33.0110081323480.1597-100000@desktop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi there,

I know this is a FAW but I'm stumped. I have a table object_attribute
with five columns:

id bigint not null default nextval('obj_attr_id_seq')
object bigint not null
name varchar(32) not null
value varchar(256)
date timestamp default now()

I have four indexes on this table: one each for id, object, name, and
value. The index for id is unique, the others are non-unique.

I recently loaded about 800000 records into this table and followed with a
vacuum analyze. There are about 160000 distinct values for object, a
handful of values for name, and the values for value are quite well
distributed.

Unfortunately for me, pg chooses NOT to EVER use the indexes for id and
object:

bb=# explain select * from object_attribute where id = 400000;
NOTICE: QUERY PLAN:

Seq Scan on object_attribute (cost=0.00..17196.42 rows=1 width=48)

EXPLAIN
bb=# explain select * from object_attribute where object = 20000;
NOTICE: QUERY PLAN:

Seq Scan on object_attribute (cost=0.00..17196.42 rows=1 width=48)

EXPLAIN

oh BOY HOWDY do those queries take a long time. On this query, the object
index gets used:

SELECT oa1.object as id
, oa1.value as type
FROM relation r
, relation_type rt
, object_attribute oa1
WHERE r.type = rt.id
AND rt.name = 'Aggregation'
AND r.r = 100000
AND r.l = oa1.object
AND oa1.name = 'ObjectType'

So, it seems like doing a join will invoke the index but just trying to
select the one row will not. I need these single row simple selects to be
really, really fast. What am I doing wrong?

BTW I have the same problem on my table "object" where the "id" column is
unique and not null, but pgsql WILL NOT use the index on simple statements
like:

bb=# explain select * from object where id = 60;
NOTICE: QUERY PLAN:

Seq Scan on object (cost=0.00..3432.07 rows=1 width=28)

EXPLAIN

But I swear thee are indexed:

bb=# \d object_pkey
Index "object_pkey"
Attribute | Type
-----------+--------
id | bigint
unique btree (primary key)

Hopeful,
Jeffrey Baker

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Jeffrey W. Baker 2001-10-08 21:08:03 Re: Not using index on VERY simple query
Previous Message Ryan 2001-10-08 19:28:20 Postgres server locks up