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
