From: | Mike Winter <mike(dot)winter(at)*nospam**frontlogic(dot)com> |
---|---|
To: | <pgsql-sql(at)postgresql(dot)org> |
Subject: | Question about slow Select when using 'IN'. |
Date: | 2002-11-29 22:23:58 |
Message-ID: | Pine.LNX.4.33L2.0211291623260.18672-100000@frontlogic.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Hi all, I hope someone can help me out.
I'm doing single-table select statements on a large table and I could use
some help in speeding it up.
My query is of the form:
SELECT col, count(col) FROM tab WHERE id IN (3,
4,7,2, ...) GROUP BY COL ORDER BY count
for a very large number of rows.
I have an index on id, so the explain looks like:
Aggregate (cost=12.12..12.14 rows=1 width=5)
-> Group (cost=12.12..12.13 rows=4 width=5)
-> Sort (cost=12.12..12.12 rows=4 width=5)
-> Index Scan using col_id_idx2, col_id_idx2, col_id_idx2,
col_id_idx2 on tab (cost=0.00..12.08 rows=4 width=5)
So, it does a separate index scan for each row in the IN statement, which
takes forever.
How do I force the query parser to emulate the behaviour displayed by this
query:
SELECT col, count(col) FROM tab WHERE (0 = id % 5) GROUP BY COL ORDER BY
count
Aggregate (cost=3.75..3.86 rows=2 width=5)
-> Group (cost=3.75..3.81 rows=21 width=5)
-> Sort (cost=3.75..3.75 rows=21 width=5)
-> Index Scan using col_id_idx2 on tab
(cost=0.00..3.29 rows=21 width=5)
Which only does one index scan for an equivelant number of records.
Thanks for any help. Please cc to my e-mail.
From | Date | Subject | |
---|---|---|---|
Next Message | A.M. | 2002-11-30 03:50:27 | |
Previous Message | Sergio Oshiro | 2002-11-29 18:55:54 | Min and Max |