| From: | "Omar Zeballos \(Kantutani\)" <ozeballos(at)kantutani(dot)com> | 
|---|---|
| To: | <pgsql-es-ayuda(at)postgresql(dot)org> | 
| Subject: | Problema de Performance con Query | 
| Date: | 2006-10-31 01:01:27 | 
| Message-ID: | 001701c6fc88$18804890$1600a8c0@serverbi | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Lista,
tengo un query de la sgte forma:
select  count(*)
from   v_kardex 
where  coddocumento = 'VTA'  
and     cantidad > 0 
and     fecha = '2006-10-01' 
Esto me tarda 4 segundos.
cuando modifico a:
select  count(*)
from   v_kardex 
where  coddocumento = 'VTA'  
and     fecha between '2006-10-01'  and '2006-10-01' 
o
  
select  count(*)
from   v_kardex 
where  coddocumento = 'VTA'  
and     fecha >= '2006-10-01'  
and     fecha <= '2006-10-01' 
Tarda 3 minutos. como veran necesito dar el rango. Hay algo mal que este haciendo, 
Tengo un indice por coddocumento y fecha, uso Postgres 8.1.3 bajo Linux RH.
Existe algu problema con la sentencia between o con la comparación del mismo campo en la sentencia.
EL EXPLAIN PLAN DE LA 1ra OPCION (LA RAPIDA ES)
Aggregate  (cost=55245.14..55245.15 rows=1 width=428)
  ->  Merge Join  (cost=54312.89..55238.44 rows=2678 width=428)
        Merge Cond: ("outer".seqkdxdocumento = "inner".seqkdxdocumento)
        ->  Sort  (cost=835.81..837.21 rows=558 width=171)
              Sort Key: a.seqkdxdocumento
              ->  Bitmap Heap Scan on kdx_documentos a  (cost=6.35..810.36 rows=558 width=171)
                    Recheck Cond: (((coddocumento)::text = 'VTA'::text) AND (fecha = '2006-10-01'::date))
                    ->  Bitmap Index Scan on idx_coddocfecha  (cost=0.00..6.35 rows=558 width=0)
                          Index Cond: (((coddocumento)::text = 'VTA'::text) AND (fecha = '2006-10-01'::date))
        ->  Sort  (cost=53477.08..53925.24 rows=179265 width=269)
              Sort Key: b.seqkdxdocumento
              ->  Seq Scan on kdx_kardex b  (cost=0.00..6509.65 rows=179265 width=269)
EL EXPLAIN PLAN DE LA 2da OPCION ES (La lenta)
Aggregate  (cost=8755.03..8755.04 rows=1 width=428)
  ->  Nested Loop  (cost=0.00..8755.02 rows=5 width=428)
        Join Filter: ("outer".seqkdxdocumento = "inner".seqkdxdocumento)
        ->  Index Scan using idx_coddocfecha on kdx_documentos a  (cost=0.00..4.56 rows=1 width=171)
              Index Cond: (((coddocumento)::text = 'VTA'::text) AND (fecha >= '2006-10-01'::date) AND (fecha <= '2006-10-01'::date))
        ->  Seq Scan on kdx_kardex b  (cost=0.00..6509.65 rows=179265 width=269)
Saludos,
_________________________________________________________________
Omar Zeballos Céspedes
Int 2601
ozeballos(at)mailserver
La Paz - Bolivia
_________________________________________________________________
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Alvaro Herrera | 2006-10-31 01:13:11 | Re: problemas bytea con php | 
| Previous Message | Alvaro Herrera | 2006-10-30 19:18:52 | Re: ejecucion de procedimientos |