Olá Flávio..
Sim, já rodei o ANALYZE, VACUUM e REINDEX, mas o EXPLAIN continua com essa
diferença absurda..
A tabela tem 66.000 registros, segue o SQL:

EXPLAIN ANALYZE
SELECT hist.endterminal AS "hist.endterminal",
       hist.indice,
       hist.funcao,
       hist.numos,
       hist.codfunc,
       hist.fase,
       hist.maquina,
       hist.datahoraini,
       hist.datahorafim,
       hist.qtdeproduzida,
       hist.qtderejeitada,
       hist.apontamnumerico,
       hist.horimetro,
       hist.atualizado
  FROM autech.thistprod hist
   WHERE ( ( hist.datahorafim >= '06/20/2012' AND hist.datahorafim <=
'06/26/2012'))
   --WHERE ( ( hist.datahorafim::date between '06/20/2012' and
'06/26/2012'))
  ORDER BY 1,1

Renato Becker


Em 26 de junho de 2012 16:13, Flavio Henrique Araque Gurgel <
[email protected]> escreveu:

>
> Em 26-06-2012 15:51, Renato Augusto escreveu:
> > Boa tarde!
> >
> > Tenho uma tabela com um campo date e tenho um índice para este campo..
> > Gostaria de entender porque um WHERE nesse campo date usando ">= AND <="
> > faz a leitura de dados através do índice(Index Scan) e usando "BETWEEN"
> > a leitura é feita de forma sequencial?
> >
> > Comparativos do EXPLAIN ANALYZE abaixo:
> >
> > SELECT com WHERE ( ( hist.datahorafim::date between '06/20/2012' and
> > '06/26/2012'))
> >
> > "Sort  (cost=10000002255.87..10000002256.70 rows=331 width=77) (actual
> > time=42.662..48.170 rows=27319 loops=1)"
> > "  Sort Key: endterminal"
> > "  Sort Method:  quicksort  Memory: 4141kB"
> > "  ->  Seq Scan on thistprod hist  (cost=10000000000.00..10000002242.02
> > rows=331 width=77) (actual time=2.284..32.959 rows=27319 loops=1)"
> > "        Filter: (((datahorafim)::date >= '2012-06-20'::date) AND
> > ((datahorafim)::date <= '2012-06-26'::date))"
> > "Total runtime: 52.685 ms"
> >
> > SELECT com WHERE hist.datahorafim >= '06/20/2012' AND hist.datahorafim
> > <= '06/26/2012'
> >
> > "Sort  (cost=3507.53..3569.86 rows=24932 width=77) (actual
> > time=18.105..23.105 rows=24865 loops=1)"
> > "  Sort Key: endterminal"
> > "  Sort Method:  quicksort  Memory: 3815kB"
> > "  ->  Bitmap Heap Scan on thistprod hist  (cost=393.81..1686.79
> > rows=24932 width=77) (actual time=2.670..9.120 rows=24865 loops=1)"
> > "        Recheck Cond: ((datahorafim >= '2012-06-20 00:00:00'::timestamp
> > without time zone) AND (datahorafim <= '2012-06-26 00:00:00'::timestamp
> > without time zone))"
> > "        ->  Bitmap Index Scan on idx_autech_thistprod_9
> >   (cost=0.00..387.57 rows=24932 width=0) (actual time=2.622..2.622
> > rows=24865 loops=1)"
> > "              Index Cond: ((datahorafim >= '2012-06-20
> > 00:00:00'::timestamp without time zone) AND (datahorafim <= '2012-06-26
> > 00:00:00'::timestamp without time zone))"
> > "Total runtime: 27.227 ms"
> >
> >
> > Se alguém souber o motivo, agradeço!!
>
> Sem a consulta completa não dá pra te responder.
> Existe "sort" no plano de execução, então, estou supondo que você está
> usando cláusula ORDER BY.
>
> Manda a consulta completa pra cá pra entendermos.
>
> O planejador toma decisões baseado nas estatísticas. Sua primeira
> consulta está prevendo 331 linhas e a segunda quase 25 mil linhas.
>
> Suas estatísticas estão atualizadas?
> Seu autovacuum está ligado e configurado?
>
> Rode um ANALYZE nas tabelas envolvidas e refaça os EXPLAIN ANALYZE.
>
> []s
>
> Flavio Henrique A. Gurgel
> Consultor e Instrutor 4Linux
> Tel: +55-11-2125-4747
> www.4linux.com.br
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a