From: | Kate Collins <klcollins(at)wsicorp(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | postgresql news group <pgsql-sql(at)postgresql(dot)org> |
Subject: | Re: SQL command speed |
Date: | 2000-05-19 13:20:55 |
Message-ID: | 39253FB7.39516F9@wsicorp.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
Tom,
Thank you for your reply.
The table I am using has 114600 total rows. The full query returns 1129
rows. Right now the table is static, i.e. I am not modifying it while I am
running these tests.
Here are the results of the EXPLAIN with the different numbers of OR's.
---QUERY 1, returns 1129 rows---
pbi=> explain
pbi-> SELECT notam_id, TO_CHAR(full_issue_date, 'DD-MON-YYYY HH24:MI')
pbi-> FROM notam_details
pbi-> WHERE
pbi-> item_a = 'EGKB' OR item_a = 'EGDM' OR item_a = 'EGHH' OR
pbi-> item_a = 'EGGD' OR item_a = 'EGVN' OR item_a = 'EGFF' OR
pbi-> item_a = 'EGDC' OR item_a = 'EGTC' OR item_a = 'EGDR' OR
pbi-> item_a = 'EGTE' OR item_a = 'EGLF' OR item_a = 'EGTG' OR
pbi-> item_a = 'EGBJ' OR item_a = 'EGLC' OR item_a = 'EGKK' OR
pbi-> item_a = 'EGLL' OR item_a = 'EGSS' OR item_a = 'EGGW' OR
pbi-> item_a = 'EGMD' OR item_a = 'EGDL' OR item_a = 'EGUM' OR
pbi-> item_a = 'EGHD' OR item_a = 'EGHE' OR item_a = 'EGKA' OR
pbi-> item_a = 'EGHI' OR item_a = 'EGMC' OR item_a = 'EGDG' OR
pbi-> item_a = 'EGFH' OR item_a = 'EGDY' OR item_a = 'EGJA' OR
pbi-> item_a = 'EGJB' OR item_a = 'EGJJ';
NOTICE: QUERY PLAN:
Seq Scan on notam_details (cost=0.00..13420.40 rows=26230 width=12)
EXPLAIN
--- QUERY 2, returns 11 rows ---
pbi=> explain
pbi-> SELECT notam_id, TO_CHAR(full_issue_date, 'DD-MON-YYYY HH24:MI')
pbi-> FROM notam_details
pbi-> WHERE
pbi-> item_a = 'EGKB';
NOTICE: QUERY PLAN:
Index Scan using notam_details_item_a on notam_details (cost=0.00..2739.57
rows=927 width=12)
EXPLAIN
--- QUERY 3, returns 11 rows ---
pbi=> explain
pbi-> SELECT notam_id, TO_CHAR(full_issue_date, 'DD-MON-YYYY HH24:MI')
pbi-> FROM notam_details
pbi-> WHERE
pbi-> item_a = 'EGKB' OR item_a = 'EGDM';
NOTICE: QUERY PLAN:
Seq Scan on notam_details (cost=0.00..4820.90 rows=1847 width=12)
EXPLAIN
---
I have run VACUUM ANALYZE NOTAM_DETAILS and created an index on the item_a
column.
I have only been using PostgreSQL for about a week, so all of this is pretty
new to me. I don't 100% understand how all of this works yet, so any insight
you can provide will be appreciated.
Kate Collins
Tom Lane wrote
> Kate Collins <klcollins(at)wsicorp(dot)com> writes:
> > I did some experimentation, and if the WHERE clause had one or two items
> > it would use the index; more and it would not.
>
> Kate, it is reasonable behavior for the planner to stop using
> indexscans when there are enough OR clauses. Each OR clause requires
> a separate indexscan and so eventually it'll be cheaper to just do one
> sequential scan over the whole table. What we appear to have here is
> a case of misestimation of the relative costs of index and sequential
> scans, leading the planner to switch too soon. Next question is why
> the misestimation. It's difficult to say anything without seeing
> your EXPLAIN results for different numbers of OR clauses. Also, how
> big is the table (how many rows) and how many rows do you actually
> get from the query?
>
> regards, tom lane
--
=================================================
Katherine (Kate) L. Collins
Senior Software Engineer/Meteorologist
Weather Services International (WSI Corporation)
4 Federal Street
Billerica, MA 01821
EMAIL: klcollins(at)wsicorp(dot)com
PHONE: (978) 670-5110
FAX: (978) 670-5100
http://www.intellicast.com
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Lockhart | 2000-05-19 13:43:45 | Re: Question about databases in alternate locations... |
Previous Message | Hiroshi Inoue | 2000-05-19 11:28:17 | Re: Re: [SQL] Foreign keys breaks tables permissions |