Обсуждение: subselects doesn't work in v7.0.3

Поиск
Список
Период
Сортировка

subselects doesn't work in v7.0.3

От
pgsql-bugs@postgresql.org
Дата:
jose (jose@sferacarta.com) reports a bug with a severity of 2
The lower the number the more severe it is.

Short Description
subselects doesn't work in v7.0.3

Long Description
Version: PostgreSQL 7.0.3 on i686-pc-linux-gnu, compiled by gcc 2.95.2

- I'm trying the following query in a table with 1973093 rows:

EXPLAIN select count(*)
   from marche
   where ristampa = 'S'
   and marca in
   (
   select marca from marche where ristampa is null and
   data_lotto between '1998/07/01' and '1999/01/31'
   );

NOTICE:  QUERY PLAN:
Aggregate  (cost=98854229180.08..98854229180.08 rows=1 width=4)
  ->  Seq Scan on marche  (cost=0.00..98854229130.75 rows=19731 width=4)
        SubPlan
          ->  Materialize  (cost=50101.13..50101.13 rows=6577 width=12)
                ->  Seq Scan on marche  (cost=0.00..50101.13 rows=6577 width=12)
EXPLAIN

- but it takes to many time: (after about 16 hours I interrupt the query)

verde:/var/lib/postgreSQL$ time psql interno < ./sql

Cancel request sent
ERROR:  Query was cancelled.
ERROR:  Query was cancelled.

real    954m44.582s
user    0m0.020s
sys     0m0.000s


- I tried the same query on DBMaker and it takes only about 1 minute.

dmSQL>
USE db #1 disconnected from db:<interno> by user:<sysadm>

real    1m10.070s
user    0m0.020s
sys     0m0.020s

- I tried the same query in a table with few rows and it
seems to work.



Sample Code


No file was uploaded with this report

Re: subselects doesn't work in v7.0.3

От
Andrew McMillan
Дата:
pgsql-bugs@postgresql.org wrote:
>
> jose (jose@sferacarta.com) reports a bug with a severity of 2
> The lower the number the more severe it is.
>
> Short Description
> subselects doesn't work in v7.0.3
>
> Long Description
> Version: PostgreSQL 7.0.3 on i686-pc-linux-gnu, compiled by gcc 2.95.2
>
> - I'm trying the following query in a table with 1973093 rows:
>
> EXPLAIN select count(*)
>    from marche
>    where ristampa = 'S'
>    and marca in
>    (
>    select marca from marche where ristampa is null and
>    data_lotto between '1998/07/01' and '1999/01/31'
>    );
>
> NOTICE:  QUERY PLAN:
> Aggregate  (cost=98854229180.08..98854229180.08 rows=1 width=4)
>   ->  Seq Scan on marche  (cost=0.00..98854229130.75 rows=19731 width=4)
>         SubPlan
>           ->  Materialize  (cost=50101.13..50101.13 rows=6577 width=12)
>                 ->  Seq Scan on marche  (cost=0.00..50101.13 rows=6577 width=12)
> EXPLAIN
>
> - but it takes to many time: (after about 16 hours I interrupt the query)

This is a known bug with IN ( ... ) and the use of indexes - you would
get better results using EXISTS.

Cheers,
                    Andrew.
--
_____________________________________________________________________
           Andrew McMillan, e-mail: Andrew@catalyst.net.nz
Catalyst IT Ltd, PO Box 10-225, Level 22, 105 The Terrace, Wellington
Me: +64 (21) 635 694, Fax: +64 (4) 499 5596, Office: +64 (4) 499 2267

Re: subselects doesn't work in v7.0.3

От
Jose Soares
Дата:
Andrew McMillan wrote:

> pgsql-bugs@postgresql.org wrote:
> >
> > jose (jose@sferacarta.com) reports a bug with a severity of 2
> > The lower the number the more severe it is.
> >
> > Short Description
> > subselects doesn't work in v7.0.3
> >
> > Long Description
> > Version: PostgreSQL 7.0.3 on i686-pc-linux-gnu, compiled by gcc 2.95.2
> >
> > - I'm trying the following query in a table with 1973093 rows:
> >
> > EXPLAIN select count(*)
> >    from marche
> >    where ristampa = 'S'
> >    and marca in
> >    (
> >    select marca from marche where ristampa is null and
> >    data_lotto between '1998/07/01' and '1999/01/31'
> >    );
> >
> > NOTICE:  QUERY PLAN:
> > Aggregate  (cost=98854229180.08..98854229180.08 rows=1 width=4)
> >   ->  Seq Scan on marche  (cost=0.00..98854229130.75 rows=19731 width=4)
> >         SubPlan
> >           ->  Materialize  (cost=50101.13..50101.13 rows=6577 width=12)
> >                 ->  Seq Scan on marche  (cost=0.00..50101.13 rows=6577 width=12)
> > EXPLAIN
> >
> > - but it takes to many time: (after about 16 hours I interrupt the query)
>
> This is a known bug with IN ( ... ) and the use of indexes - you would
> get better results using EXISTS.

Yes. EXISTS works.
PostgreSQL takes 9.720 secs against DBMaker 7.145 secs
Thank you very much
Jose'

>
>
> Cheers,
>                                         Andrew.
> --
> _____________________________________________________________________
>            Andrew McMillan, e-mail: Andrew@catalyst.net.nz
> Catalyst IT Ltd, PO Box 10-225, Level 22, 105 The Terrace, Wellington
> Me: +64 (21) 635 694, Fax: +64 (4) 499 5596, Office: +64 (4) 499 2267