Re: Performing partition pruning using row value
От | Etsuro Fujita |
---|---|
Тема | Re: Performing partition pruning using row value |
Дата | |
Msg-id | CAPmGK16kGCS1xRgF9Kbu4TZ_cvsqv73Nh_OrF-s_L10uWeSeDQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Performing partition pruning using row value ("kato-sho@fujitsu.com" <kato-sho@fujitsu.com>) |
Ответы |
RE: Performing partition pruning using row value
|
Список | pgsql-hackers |
Kato-san, On Mon, Jul 6, 2020 at 5:25 PM kato-sho@fujitsu.com <kato-sho@fujitsu.com> wrote: > I would like to ask about the conditions under which partition pruning is performed. > In PostgreSQL 12, when I executed following SQL, partition pruning is not performed. > > postgres=# explain select * from a where (c1, c2) < (99, 99); > QUERY PLAN > ---------------------------------------------------------------- > Append (cost=0.00..60.00 rows=800 width=40) > -> Seq Scan on a1 a_1 (cost=0.00..28.00 rows=400 width=40) > Filter: (ROW(c1, c2) < ROW(99, 99)) > -> Seq Scan on a2 a_2 (cost=0.00..28.00 rows=400 width=40) > Filter: (ROW(c1, c2) < ROW(99, 99)) > (5 rows) > > However, pruning is performed when I changed the SQL as follows. > > postgres=# explain select * from a where c1 < 99 and c2 < 99; > QUERY PLAN > -------------------------------------------------------- > Seq Scan on a1 a (cost=0.00..28.00 rows=133 width=40) > Filter: ((c1 < 99) AND (c2 < 99)) > (2 rows) Just to be clear, the condition (c1, c2) < (99, 99) is not equivalent to the condition c1 < 99 and c2 < 99 (see the documentation note in [1]). > Looking at the code, "(c1, c2) < (99, 99)" is recognized as RowCompExpr and "c1 < 99 and c2 < 99" is recognized combinationof OpExpr. > > Currently, pruning is not performed for RowCompExpr, is this correct? Yeah, I think so. > Because it would take a long time to parse all Expr nodes, does match_cluause_to_partition_key() return PART_CLAUSE_UNSUPPORTEDwhen such Expr node is passed? I don't know the reason why that function doesn't support row-wise comparison, but I don't think the main reason for that is that it takes time to parse expressions. > If the number of args in RowCompExpr is small, I would think that expanding it would improve performance. Yeah, I think it's great to support row-wise comparison not only with the small number of args but with the large number of them. Best regards, Etsuro Fujita [1] https://www.postgresql.org/docs/current/functions-comparisons.html#ROW-WISE-COMPARISON
В списке pgsql-hackers по дате отправления: