Re: A problem about partitionwise join

Поиск
Список
Период
Сортировка
От Etsuro Fujita
Тема Re: A problem about partitionwise join
Дата
Msg-id CAPmGK14kuyh9JciSN-2hDb7cDf6H300S3t07pLTbfkxaCO5BHw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: A problem about partitionwise join  (Richard Guo <riguo@pivotal.io>)
Ответы Re: A problem about partitionwise join  (Richard Guo <riguo@pivotal.io>)
Список pgsql-hackers
Hi,

On Tue, Aug 27, 2019 at 4:57 PM Richard Guo <riguo@pivotal.io> wrote:
> Check the query below as a more illustrative example:
>
> create table p (k int, val int) partition by range(k);
> create table p_1 partition of p for values from (1) to (10);
> create table p_2 partition of p for values from (10) to (100);
>
> If we use quals 'foo.k = bar.k and foo.k = bar.val', we can generate
> partitionwise join:
>
> # explain (costs off)
> select * from p as foo join p as bar on foo.k = bar.k and foo.k = bar.val;
>                QUERY PLAN
> -----------------------------------------
>  Append
>    ->  Hash Join
>          Hash Cond: (foo.k = bar.k)
>          ->  Seq Scan on p_1 foo
>          ->  Hash
>                ->  Seq Scan on p_1 bar
>                      Filter: (k = val)
>    ->  Hash Join
>          Hash Cond: (foo_1.k = bar_1.k)
>          ->  Seq Scan on p_2 foo_1
>          ->  Hash
>                ->  Seq Scan on p_2 bar_1
>                      Filter: (k = val)
> (13 rows)
>
> But if we exchange the order of the two quals to 'foo.k = bar.val and
> foo.k = bar.k', then partitionwise join cannot be generated any more,
> because we only have joinclause 'foo.k = bar.val' as it first reached
> score of 3. We have missed the joinclause on the partition key although
> it does exist.
>
> # explain (costs off)
> select * from p as foo join p as bar on foo.k = bar.val and foo.k = bar.k;
>                QUERY PLAN
> -----------------------------------------
>  Hash Join
>    Hash Cond: (foo.k = bar.val)
>    ->  Append
>          ->  Seq Scan on p_1 foo
>          ->  Seq Scan on p_2 foo_1
>    ->  Hash
>          ->  Append
>                ->  Seq Scan on p_1 bar
>                      Filter: (val = k)
>                ->  Seq Scan on p_2 bar_1
>                      Filter: (val = k)
> (11 rows)

I think it would be nice if we can address this issue.

Best regards,
Etsuro Fujita



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

Предыдущее
От: Narendra Pradeep U U
Дата:
Сообщение: Converting Nested loop to hashjoin for not is distinct from case
Следующее
От: Emre Hasegeli
Дата:
Сообщение: Re: Crash in BRIN summarization