| From: | "A(dot) Kretschmer" <andreas(dot)kretschmer(at)schollglas(dot)com> |
|---|---|
| To: | pgsql-performance(at)postgresql(dot)org |
| Subject: | Re: mysterious difference in speed when combining two queries with OR |
| Date: | 2008-04-23 07:58:10 |
| Message-ID: | 20080423075810.GB8401@a-kretschmer.de |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-performance |
am Wed, dem 23.04.2008, um 9:23:07 +0200 mailte Hans Ekbrand folgendes:
> I cannot understand why the following two queries differ so much in execution time (almost ten times)
wild guess: different execution plans.
Can you show us the plans? (EXPLAIN ANALYSE SELECT ...)
>
> Query A (two queries)
>
> select distinct moment.mid from moment,timecard where parent = 45 and (pid=17 and timecard.mid = moment.mid) order by moment.mid;
> select distinct moment.mid from moment,timecard where parent = 45 and (pbar = 0) order by moment.mid;
>
> Query B (combining the two with OR)
>
> select distinct moment.mid from moment,timecard where parent = 45 and ((pid=17 and timecard.mid = moment.mid) or (pbar = 0)) order by moment.mid;
>
> [ snip ]
>
> I should say that this is on postgresql 7.4.16 (debian stable).
Uhh. Why not a recent version? We have 8.3.0...
>
> Can query B be rewritten so that it would execute faster?
Quick and dirty: use both selects (query A) combined with UNION.
I guess, with a recent version the planner can use a bitmap index scan
to perform Query B faster.
Andreas
--
Andreas Kretschmer
Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)
GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Craig Ringer | 2008-04-23 08:28:05 | Re: SELECT 'DBD::Pg ping test' |
| Previous Message | Hans Ekbrand | 2008-04-23 07:23:07 | mysterious difference in speed when combining two queries with OR |