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

Responder a