On Sat, Nov 14, 2020 at 2:14 PM Tom Lane <t...@sss.pgh.pa.us> wrote:

> Andy Fan <zhihui.fan1...@gmail.com> writes:
> > Take the following example:
>
> > insert into cte1  select i, i from generate_series(1, 1000000)i;
> > create index on cte1(a);
>
> > explain
> > with cte1 as  (select * from cte1)
> > select * from c where a = 1;
>
> > It needs to do seq scan on the above format, however it is pretty
> > quick if we change the query to
> > select * from (select * from cte1) c where a = 1;
>
> This example seems both confused and out of date.  Since we changed
> the rules on materializing CTEs (in 608b167f9), I get
>
>
Sorry,  I should have tested it again on the HEAD,  and 608b167f9 is exactly
the thing  I mean.

regression=# create table c as select i as a, i from generate_series(1,
> 1000000)i;
> SELECT 1000000
> regression=# create index on c(a);
> CREATE INDEX
> regression=# explain
> regression-# with cte1 as (select * from c)
> regression-# select * from cte1 where a = 1;
>                                 QUERY PLAN
> --------------------------------------------------------------------------
>  Bitmap Heap Scan on c  (cost=95.17..4793.05 rows=5000 width=8)
>    Recheck Cond: (a = 1)
>    ->  Bitmap Index Scan on c_a_idx  (cost=0.00..93.92 rows=5000 width=0)
>          Index Cond: (a = 1)
> (4 rows)
>
>                         regards, tom lane
>


-- 
Best Regards
Andy Fan

Reply via email to