Re: Constraint exclusion on UNION ALL subqueries with WHERE conditions

From: Gunnlaugur Þór Briem <gunnlaugur(at)gmail(dot)com>
To: pgsql-performance(at)postgresql(dot)org
Subject: Re: Constraint exclusion on UNION ALL subqueries with WHERE conditions
Date: 2011-09-20 09:15:30
Message-ID: 12971543.2235.1316510130842.JavaMail.geo-discussion-forums@yqcd38
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-performance

On Monday, September 19, 2011 3:59:30 AM UTC, Tom Lane wrote:
> Works for me in 8.4.8. Do you have constraint_exclusion set to ON?

I did try with constraint_exclusion set to on, though the docs suggest partition should be enough ("examine constraints only for ... UNION ALL subqueries")

Here's a minimal test case (which I should have supplied in the original post, sorry), tried just now in 8.4.8:

CREATE OR REPLACE VIEW v_heavy_view
AS SELECT (random()*1e5)::integer col
FROM generate_series(1, 1e6::integer);

CREATE OR REPLACE VIEW v_test_constraint_exclusion AS
SELECT col FROM v_heavy_view WHERE col < 3
UNION ALL SELECT col FROM v_heavy_view WHERE col >= 3;

EXPLAIN SELECT * FROM v_test_constraint_exclusion WHERE col=2;

QUERY PLAN
--------------------------------------------------------------------------
Result (cost=0.00..70.04 rows=4 width=4)
-> Append (cost=0.00..70.04 rows=4 width=4)
-> Subquery Scan v_heavy_view (cost=0.00..35.00 rows=2 width=4)
Filter: ((v_heavy_view.col < 3) AND (v_heavy_view.col = 2))
-> Function Scan on generate_series (cost=0.00..20.00 rows=1000 width=0)
-> Subquery Scan v_heavy_view (cost=0.00..35.00 rows=2 width=4)
Filter: ((v_heavy_view.col >= 3) AND (v_heavy_view.col = 2))
-> Function Scan on generate_series (cost=0.00..20.00 rows=1000 width=0)

I want the planner to notice that (v_heavy_view.col >= 3) AND (v_heavy_view.col = 2) can never be satisfied, and skip that subquery.

Regards,

- Gulli

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Florian Pflug 2011-09-20 09:48:06 Re: CUDA Sorting
Previous Message Heikki Linnakangas 2011-09-20 09:03:51 Re: Separating bgwriter and checkpointer

Browse pgsql-performance by date

  From Date Subject
Next Message Merlin Moncure 2011-09-20 16:11:28 Re: Hash index use presently(?) discouraged since 2005: revive or bury it?
Previous Message Craig Ringer 2011-09-20 05:04:56 Re: Postgres INSERT performance and scalability