Re: path toward faster partition pruning
Rajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com>
On Mon, Nov 6, 2017 at 3:31 PM, Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
wrote:
> Attached updated set of patches, including the fix to make the new pruning
> code handle Boolean partitioning.
>
Hi Amit,
I have tried pruning for different values of constraint exclusion GUC
change, not sure exactly how it should behave, but I can see with the
delete statement pruning is not happening when constraint_exclusion is off,
but select is working as expected. Is this expected behaviour?
create table lp (c1 int, c2 text) partition by list(c1);
create table lp1 partition of lp for values in (1,2);
create table lp2 partition of lp for values in (3,4);
create table lp3 partition of lp for values in (5,6);
insert into lp values (1,'p1'),(2,'p1'),(3,'p2'),(4,'p2'),(5,'p3');
show constraint_exclusion ;
constraint_exclusion
----------------------
partition
(1 row)
explain select c1 from lp where c1 >= 1 and c1 < 2;
QUERY PLAN
----------------------------------------------------------
Append (cost=0.00..29.05 rows=6 width=4)
-> Seq Scan on lp1 (cost=0.00..29.05 rows=6 width=4)
Filter: ((c1 >= 1) AND (c1 < 2))
(3 rows)
explain delete from lp where c1 >= 1 and c1 < 2;
QUERY PLAN
----------------------------------------------------------
Delete on lp (cost=0.00..29.05 rows=6 width=6)
Delete on lp1
-> Seq Scan on lp1 (cost=0.00..29.05 rows=6 width=6)
Filter: ((c1 >= 1) AND (c1 < 2))
(4 rows)
set constraint_exclusion = off;
explain select c1 from lp where c1 >= 1 and c1 < 2;
QUERY PLAN
----------------------------------------------------------
Append (cost=0.00..29.05 rows=6 width=4)
-> Seq Scan on lp1 (cost=0.00..29.05 rows=6 width=4)
Filter: ((c1 >= 1) AND (c1 < 2))
(3 rows)
*explain delete from lp where c1 >= 1 and c1 < 2;*
QUERY PLAN
----------------------------------------------------------
Delete on lp (cost=0.00..87.15 rows=18 width=6)
Delete on lp1
Delete on lp2
Delete on lp3
-> Seq Scan on lp1 (cost=0.00..29.05 rows=6 width=6)
Filter: ((c1 >= 1) AND (c1 < 2))
-> Seq Scan on lp2 (cost=0.00..29.05 rows=6 width=6)
Filter: ((c1 >= 1) AND (c1 < 2))
-> Seq Scan on lp3 (cost=0.00..29.05 rows=6 width=6)
Filter: ((c1 >= 1) AND (c1 < 2))
(10 rows)
Thanks & Regards,
Rajkumar Raghuwanshi
QMG, EnterpriseDB Corporation
Commits
-
Fix assorted partition pruning bugs
- d758d9702e2f 11.0 landed
-
Make gen_partprune_steps static
- d1e2cac5ff7e 11.0 landed
-
Remove useless 'default' clause
- c775fb9e18ac 11.0 landed
-
Reorganize partitioning code
- da6f3e45ddb6 11.0 landed
-
Use custom hash opclass for hash partition pruning
- fafec4cce814 11.0 landed
-
Blindly attempt to fix sepgsql tests broken due to 9fdb675fc5.
- 4f813c7203e0 11.0 landed
-
Attempt to fix endianess issues in new hash partition test.
- 40e42e1024c5 11.0 landed
-
Faster partition pruning
- 9fdb675fc5d2 11.0 landed
-
For partitionwise join, match on partcollation, not parttypcoll.
- 2af28e603319 11.0 landed
-
Revise API for partition bound search functions.
- f724022d0ae0 11.0 landed
-
Revise API for partition_rbound_cmp/partition_rbound_datum_cmp.
- b0229235564f 11.0 landed
-
Fix possible crash in partition-wise join.
- f069c91a5793 11.0 cited
-
Refactor code for partition bound searching
- 9aef173163ae 11.0 landed
-
New C function: bms_add_range
- 84940644de93 11.0 landed
-
Add extensive tests for partition pruning.
- 8d4e70a63bf8 11.0 landed
-
Add null test to partition constraint for default range partitions.
- 7b88d63a9122 11.0 cited
-
Remove BufFile's isTemp flag.
- 11e264517dff 11.0 cited
-
Make OWNER TO subcommand mention consistent
- bf54c0f05c0a 11.0 cited
-
Fix index matching for operators with mixed collatable/noncollatable inputs.
- cb37c291060d 9.2.0 cited