union vs. sort

Поиск
Список
Период
Сортировка
От Karel Zak
Тема union vs. sort
Дата
Msg-id 20040406120435.GA11681@zf.jcu.cz
обсуждение исходный текст
Ответы Re: union vs. sort  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
I'm  surprise  with query  plan  that  PostgreSQL planner  prepare  forselects with ORDER  BY if all data are from
sub-selectthat is alreadysorted.       # explain select data from                         (select distinct data from
addr)                 as x order by x.data;       -------------------------------------------------        Subquery
Scanx          ->  Unique                ->  Sort                      Sort Key: data                      ->  Seq Scan
onaddr
 

This is  right -- the  main of query doesn't  use "Sort" for  ORDER BY,because subselect is sorted by "Unique".

And almost same query, but in the subselect is union:       # explain select data from                         (select
datafrom addr                             union                          select data from addr2)                  as x
orderby x.data;       -----------------------------------------        Sort          Sort Key: data          ->
SubqueryScan x                ->  Unique                      ->  Sort                            Sort Key: data
                   ->  Append                                  ->  Subquery Scan "*SELECT* 1"
             ->  Seq Scan on addr                                  ->  Subquery Scan "*SELECT* 2"
                ->  Seq Scan on addr2
 

  I think  it's bad, because  there is used extra  sort for ORDER  BY foralready by "Unique" sorted data.
If I add ORDER BY to subselect:
       # explain select data from                     (select data from addr                         union
       select data from addr2 order by data)                  as x order by x.data;
---------------------------------------------------       Sort          Sort Key: data          ->  Subquery Scan x
          ->  Sort                      Sort Key: data                      ->  Unique                             ->
Sort                                 Sort Key: data                                  ->  Append
               ->  Subquery Scan "*SELECT* 1"                                              ->  Seq Scan on addr
                               ->  Subquery Scan "*SELECT* 2"                                              ->  Seq Scan
onaddr2 
 

I see two unnecessary sorts for unique and already sorted data.
The core of problem is probbaly UNION, because if I use simple query without subselect it still sort already sorderd
data:
       # explain select data from addr                      union                  select data from addr2
  order by data;       -----------------------------------        Sort          Sort Key: data          ->  Unique
         ->  Sort                      Sort Key: data                      ->  Append                            ->
SubqueryScan "*SELECT* 1"                                  ->  Seq Scan on addr                            ->  Subquery
Scan"*SELECT* 2"                                  ->  Seq Scan on addr2
 

Or order of data which returns "unique" is for UNION diffrent that datafrom DISTINCT? (see first example).
   Karel

-- Karel Zak  <zakkr@zf.jcu.cz>http://home.zf.jcu.cz/~zakkr/


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

Предыдущее
От: Fabien COELHO
Дата:
Сообщение: pg_hba.conf view from the database?
Следующее
От: Richard Huxton
Дата:
Сообщение: Re: pg_hba.conf view from the database?