Ken Egervari wrote:
I've tried to use Dan Tow's tuning method and created all the right indexes
from his diagraming method, but the query still performs quite slow both inside
the application and just inside pgadmin III. Can anyone be kind enough to help
me tune it so that it performs better in postgres? I don't think it's using
the right indexes, or maybe postgres needs special treatment.
I've converted the below query to SQL from a Hibernate query, so the syntax is
probably not perfect but it's semantics are exactly the same. I've done so by
looking at the source code, but I can't run it to get the exact SQL since I
don't have the database on my home machine.
select s.*
from shipment s
inner join carrier_code cc on s.carrier_code_id = cc.id
inner join carrier c on cc.carrier_id = c.id
inner join carrier_to_person ctp on ctp.carrier_id = c.id
inner join person p on p.id = ctp.person_id
inner join shipment_status cs on s.current_status_id = cs.id
inner join release_code rc on cs.release_code_id = rc.id
left join shipment_status ss on ss.shipment_id = s.id
where
p.id = :personId and
s.is_purged = false and
rc.number = '9' and
cs is not null and
cs.date >= current_date - 31
order by cs.date desc
You might be able to coerce the planner to drive off person by
rearranging the join orders, plus a few other bits... hopefully I have
not brutalized the query to the point where it does not work :-) :
select p.id, s*, ss.*
from person p
inner join carrier_to_person ctp on p.id = ctp.person_id
inner join carrier c on ctp.carrier_id = c.id
inner join carrier_code cc on cc.carrier_id = c.id
inner join shipment s on s.carrier_code_id = cc.id
inner join shipment_status cs on s.current_status_id = cs.id
inner join release_code rc on cs.release_code_id = rc.id
left join shipment_status ss on ss.shipment_id = s.id
where
p.id = :personId and
s.is_purged = false and
rc.number = 9 and
cs is not null and
cs.date between current_date - 31 and current_date
order by cs.date desc
I have added the 'p.id' in the select list in the hope that that might
encourage the planner to take seriously the idea of getting the person
row(?) first. In addition I made 9 a number and closed the inequality
(just in case it helps a bit).
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]