Re: mysterious difference in speed when combining two queries with OR
Theo Kramer <theo@flame.co.za>
From: Theo Kramer <theo@flame.co.za>
To: pgsql-performance@postgresql.org
Date: 2008-04-23T11:00:07Z
Lists: pgsql-performance
On 23 Apr 2008, at 9:23AM, Hans Ekbrand wrote: > I cannot understand why the following two queries differ so much in > execution time (almost ten times) > > 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; > > $ time psql -o /dev/null -f query-a.sql fektest > > real 0m2.016s > user 0m1.532s > sys 0m0.140s > > $ time psql -o /dev/null -f query-b.sql fektest > > real 0m28.534s > user 0m1.516s > sys 0m0.156s > > I have tested this in two different computers with different amount of > RAM, fast or slow CPU, and the difference is persistent, almost ten > times. > > I should say that this is on postgresql 7.4.16 (debian stable). > > Can query B be rewritten so that it would execute faster? Try select distinct moment.mid from moment,timecard where parent = 45 and (pid=17 and timecard.mid = moment.mid) order by moment.mid union all select distinct moment.mid from moment,timecard where parent = 45 and (pbar = 0) order by moment.mid; -- Regards Theo