Re: PG 8.2beta reordering working for this case?

Поиск
Список
Период
Сортировка
От Kyle Bateman
Тема Re: PG 8.2beta reordering working for this case?
Дата
Msg-id 4529DDCC.6010909@actarg.com
обсуждение исходный текст
Ответ на Re: PG 8.2beta reordering working for this case?  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: PG 8.2beta reordering working for this case?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-sql
Tom Lane wrote:

>Kyle Bateman <kyle@actarg.com> writes:
>
>
>>Is there a way to make the optimizer do this?
>>
>>
>
>Sorry, that's not happening for 8.2.  Consider using a union all (not
>union) across the subledg_N tables directly and then joining to that.
>That boils down to being a partitioning case and I think probably will
>be covered by the 8.2 improvements.
>
Yup, union all is much more efficient.  It hadn't really occurred to me
the difference between union and union all.  But it makes sense to
eliminate the need for a unique sort.  The q3 query went from 10 seconds
to 1 second with just the addition of union all in the general ledger.

BTW, explain analyze still says 10 seconds of run time (and takes 10
seconds to run), but when I remove the explain analyze, the query runs
in about a second.  What's that all about?

Also, I came up with the view shown in the attachment.  It is still much
faster than joining to the union-all ledger (40 ms).  I'm not sure why
because I'm not sure if explain analyze is telling me the real story (I
see a sequential scan of the ledgers in there when it runs 10 seconds).
I'm not sure what it's doing when it runs in 1 second.

Kyle

-- This view is a possible workaround for the problem
drop view gen_ledg_pr;

--explain analyze
create view gen_ledg_pr as
  select lg.*, pr.anst_id
    from     subview_A    lg
    join    proj_rel    pr    on pr.prog_id = lg.proj

  union all select lg.*, pr.anst_id
    from     subview_B    lg
    join    proj_rel    pr    on pr.prog_id = lg.proj

  union all select lg.*, pr.anst_id
    from     subview_C    lg
    join    proj_rel    pr    on pr.prog_id = lg.proj
;

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

Предыдущее
От: Bruno Wolff III
Дата:
Сообщение: Re: optimal insert
Следующее
От: Tom Lane
Дата:
Сообщение: Re: PG 8.2beta reordering working for this case?