Re: Help with tuning this query

Поиск
Список
Период
Сортировка
От Ragnar Hafstað
Тема Re: Help with tuning this query
Дата
Msg-id 1109787227.31084.12.camel@localhost.localdomain
обсуждение исходный текст
Ответ на Help with tuning this query  ("Ken Egervari" <ken@upfactor.com>)
Список pgsql-performance
On Wed, 2005-03-02 at 01:51 -0500, Ken Egervari wrote:
>
> 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
> ...
> shipment contains 40,000 rows
> shipment_status contains 80,000 rows

I may be missing something, but it looks like the second join
on shipment_status (the left join) is not adding anything to your
results, except more work. ss is not used for output, nor in the where
clause, so what is its purpose ?

if cs.date has an upper limit, it might be helpful to change the
condition to a BETWEEN

in any case, i would think you might need an index on
  shipment(carrier_code_id)
  shipment(current_status_id)
  shipment_status(id)

gnari




В списке pgsql-performance по дате отправления:

Предыдущее
От: "Shawn Chisholm"
Дата:
Сообщение: Performance tradeoff
Следующее
От: "Ken Egervari"
Дата:
Сообщение: Re: Help with tuning this query