On Thursday, January 12, 2012 01:01:01 AM Tom Lane wrote:
>  (In cases where we know it's unique, something like this
> could be reasonable, but I believe get_variable_numdistinct already
> accounts for such cases.)
One of those case which looks relatively easy is that CTEs currently work as a 
kind of 'statistics barrier' here. Specifically I wonder why:

test_raptelan=# EXPLAIN WITH foo AS (SELECT * FROM b WHERE id < 5000) SELECT * 
FROM a WHERE a.id IN (SELECT id FROM foo);
                                  QUERY PLAN                                  
------------------------------------------------------------------------------
 Nested Loop  (cost=302.02..1876.30 rows=2550000 width=11)
   CTE foo
     ->  Index Scan using b_pkey on b  (cost=0.00..184.06 rows=5243 width=10)
           Index Cond: (id < 5000)
   ->  HashAggregate  (cost=117.97..119.97 rows=200 width=4)
         ->  CTE Scan on foo  (cost=0.00..104.86 rows=5243 width=4)
   ->  Index Scan using a_pkey on a  (cost=0.00..7.85 rows=1 width=11)
         Index Cond: (id = foo.id)


plans differently than

test_raptelan=# EXPLAIN SELECT * FROM a WHERE a.id IN (SELECT id FROM b WHERE 
id < 5000 OFFSET 0);
                                         QUERY PLAN                             
            
--------------------------------------------------------------------------------------------
 Merge Semi Join  (cost=560.41..17426.03 rows=5243 width=11)
   Merge Cond: (a.id = b.id)
   ->  Index Scan using a_pkey on a  (cost=0.00..160013.81 rows=5100000 
width=11)
   ->  Sort  (cost=560.40..573.51 rows=5243 width=4)
         Sort Key: b.id
         ->  Limit  (cost=0.00..184.06 rows=5243 width=4)
               ->  Index Only Scan using b_pkey on b  (cost=0.00..184.06 
rows=5243 width=4)
                     Index Cond: (id < 5000)


Couldn't the CTE pass a vardata from inside to the outside?

Andres

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to