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

Responder a