Caro Matheus, Segue o EXPLAIN ANALYZE: "Limit (cost=0.00..10.27 rows=1 width=23) (actual time=27455.446..27455.446 rows=0 loops=1)" " -> Index Scan Backward using frete01_x01 on frete01 (cost=0.00..320637.77 rows=31215 width=23) (actual time=27455.417..27455.417 rows=0 loops=1)" " Index Cond: (docserie = ' U2'::bpchar)" " Filter: (((codfilorig = 94::numeric) OR (codfilorig = 95::numeric) OR (codfilorig = 98::numeric) OR (codfilorig = 99::numeric) OR (codfilorig = 100::numeric) OR (codfilorig = 118::numeric)) AND (datalancam IS NOT NULL))" "Total runtime: 27467.570 ms"
O DATALANCAM IS NOT NULL é sempre usado, a serie sempre será especificada, o que é dinamico é o CODFILORIG que poder 1 ou várias, eu criei um indice docserie+codfilorig mas o postgresql insiste em usar um indice datalancam+docserie+docnumer. Uma duvida eu posso rodar um ANALYZE enquanto estão usando o banco de dados ? Eu tenho os processos agendados para serem executados a noite, mas gostaria de saber se pode ser usado um ANALYZE durante o expediente. Desde já agradeço a atenção recebida. Em 16 de maio de 2013 09:00, Matheus de Oliveira <[email protected]>escreveu: > > > > On Thu, May 16, 2013 at 8:44 AM, Marco Aurelio <[email protected]>wrote: > >> Caros, >> >> Gostaria da ajuda de vocês para fazer uma determinada query ficar mais >> rápida. >> >> Query: >> SELECT docnumero FROM frete01 WHERE docserie = ' U2' AND (codfilorig = >> 94 OR codfilorig=95 OR codfilorig=98 OR codfilorig=99 OR codfilorig=100 OR >> codfilorig=118 ) AND datalancam IS NOT NULL ORDER BY datalancam DESC, >> docserie DESC, docnumero DESC LIMIT 1 >> >> Explain: >> "Limit (cost=0.00..10.27 rows=1 width=23)" >> " -> Index Scan Backward using frete01_x01 on frete01 >> (cost=0.00..321102.79 rows=31270 width=23)" >> " Index Cond: (docserie = ' U2'::bpchar)" >> " Filter: (((codfilorig = 94::numeric) OR (codfilorig = >> 95::numeric) OR (codfilorig = 98::numeric) OR (codfilorig = 99::numeric) OR >> (codfilorig = 100::numeric) OR (codfilorig = 118::numeric)) AND (datalancam >> IS NOT NULL))" >> >> Se eu tiver um indice por docserie + codfilorig ajuda ? >> >> Desde já agradeço a atenção recebida. >> >> > De cara, troque o `codfilorig=X or codfilorig=Y...` por `codfilorig IN > (X,Y,Z,...)`. > > Tem como mandar o EXPLAIN ANALYZE? E se possível usar o explain.depesz.com > . > > O que nessa query é dinâmico e o que é estático? Exemplo: datalancam IS > NOT NULL é sempre usado? > > Valeu. > > -- > Matheus de Oliveira > Analista de Banco de Dados > Dextra Sistemas - MPS.Br nível F! > www.dextra.com.br/postgres > > > _______________________________________________ > pgbr-geral mailing list > [email protected] > https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral > > -- Marco Aurélio Ventura da Silva [email protected] Prodata Informática e Cadastro LTDA (33)3322-4444
_______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
