On Thu, Apr 16, 2020 at 6:35 PM Richard Guo <guofengli...@gmail.com> wrote:

>
> On Wed, Apr 15, 2020 at 10:47 PM Tomas Vondra <
> tomas.von...@2ndquadrant.com> wrote:
>
>>
>> Well, yeah. The problem is the Unique simply compares the columns in the
>> order it sees them, and it does not match the column order desired by
>> incremental sort. But we don't push down this information at all :-(
>>
>
> This is a nice optimization better to have. Since the 'Sort and Unique'
> would unique-ify the result of a UNION by sorting on all columns, why
> not we adjust the sort order trying to match parse->sortClause so that
> we can avoid the final sort node?
>
> Doing that we can transform plan from:
>
> # explain (costs off) select * from foo union select * from foo order by
> 1,3;
>                   QUERY PLAN
> -----------------------------------------------
>  Incremental Sort
>    Sort Key: foo.a, foo.c
>    Presorted Key: foo.a
>    ->  Unique
>          ->  Sort
>                Sort Key: foo.a, foo.b, foo.c
>                ->  Append
>                      ->  Seq Scan on foo
>                      ->  Seq Scan on foo foo_1
> (9 rows)
>
> To:
>
> # explain (costs off) select * from foo union select * from foo order by
> 1,3;
>                QUERY PLAN
> -----------------------------------------
>  Unique
>    ->  Sort
>          Sort Key: foo.a, foo.c, foo.b
>          ->  Append
>                ->  Seq Scan on foo
>                ->  Seq Scan on foo foo_1
> (6 rows)
>
>
Attached is what I'm thinking about this optimization. Does it make any
sense?

Thanks
Richard

Attachment: 0001-Fix-incremental-sort-crash.patch
Description: Binary data

Reply via email to