From: | Mario Ivankovits <mario(at)ops(dot)co(dot)at> |
---|---|
To: | pgsql-performance(at)postgresql(dot)org |
Subject: | index not used if using IN or OR |
Date: | 2004-11-04 07:55:50 |
Message-ID: | 4189E086.5060400@ops.co.at |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Hello !
Sorry if this has been discussed before, it is just hard to find in the
archives using the words "or" or "in" :-o
I use postgres-8.0 beta4 for windows.
I broke down my problem to a very simple table - two columns
"primary_key" and "secondary_key". Creates and Insert you will find below.
If I query the _empty_ freshly created table I get the following explain
result:
select * from tt where seckey = 1;
Index Scan using seckey_key on tt (cost=0.00..17.07 rows=5 width=12)
Index Cond: (seckey = 1)
If I use "OR" (or IN) things get worse:
select * from tt where seckey = 1 or seckey = 2
Seq Scan on tt (cost=0.00..0.00 rows=1 width=12)
Filter: ((seckey = 1) OR (seckey = 2))
Note the "Seq Scan" instead of using the index.
After populating the table with 8920 records and "analyze" the scenario
gets even worser:
select * from tt where seckey = 1;
Seq Scan on tt (cost=0.00..168.50 rows=1669 width=12) (actual
time=0.000..15.000 rows=1784 loops=1)
Filter: (seckey = 1)
Total runtime: 31.000 ms
Now also this simple query uses a "Seq Scan".
Now the questions are:
a) Why is the index not used if I use "OR" or "IN"
b) Why is the index not used after "analyze" ?
Any help is very appreciated!
Thanks,
Mario
// The table and data
CREATE TABLE tt (
pkey int4 NOT NULL DEFAULT nextval('public."tt_PKEY_seq"'::text),
seckey int8,
CONSTRAINT pkey_key PRIMARY KEY (pkey)
)
WITHOUT OIDS;
CREATE INDEX seckey_key ON tt USING btree (seckey);
// inserted many-many times
insert into tt values (default, 1);
insert into tt values (default, 2);
insert into tt values (default, 3);
insert into tt values (default, 4);
insert into tt values (default, 5);
From | Date | Subject | |
---|---|---|---|
Next Message | Matt Clark | 2004-11-04 08:29:39 | Re: Restricting Postgres |
Previous Message | Mike Benoit | 2004-11-04 00:50:42 | Re: preloading indexes |