If you are using partitioned tables, make sure you have enabled partition pruning:
SET enable_partition_pruning to on;
The explain statement is simple enough:
explain select * from documents where dokumenttype='SUBPOENA'; QUERY PLAN --------------------------------------------------------------------- Append (cost=0.00..1.02 rows=1 width=774) -> Seq Scan on P_SUBPOENA (cost=0.00..1.01 rows=1 width=774) Filter: ((documenttype)::text = 'SUBPOENA'::text) (3 rows)Since this is the LIST-partitioned table outlined in this post, I know the optimizer picked the correct partition for my predicate.
For the LIST-range subpartitioned table outlined in this post, I get the following query plan:
explain select * from orders where country_code='se' and order_total between 4000 and 4999; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------- Append (cost=0.00..28.21 rows=1 width=50) -> Seq Scan on large_orders_se (cost=0.00..28.20 rows=1 width=50) Filter: ((order_total >= '4000'::numeric) AND (order_total <= '4999'::numeric) AND ((country_code)::text = 'se'::text)) (3 rows)
Regarding parallelism, the documentation tells you to watch for the terms Gather or Gather Merge Node in the query plan:
An example:
"Subquery Scan on andre (cost=1000.00..10024950.78 rows=294885 width=84)" " -> Gather (cost=1000.00..10013892.60 rows=294885 width=64)" " Workers Planned: 2" " -> ProjectSet (cost=0.00..9983404.10 rows=29488500 width=64)" " -> ProjectSet (cost=0.00..9830063.90 rows=12286900 width=128)"