From: | "Raul Andres Duque" <ra_duque(at)yahoo(dot)com(dot)mx> |
---|---|
To: | <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | No usa índice |
Date: | 2007-09-11 14:58:21 |
Message-ID: | 009001c7f484$32d9bf60$5800a8c0@amadeus.net.co |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Cordial Saludo Compañeros:
Básicamente tengo un query donde filtro por un rango de fechas (usando BETWEEN), cómo la tabla va a crecer mucho, he creado un índice por el campo "fecha_movimiento" pero mi query no lo usa (hace un seq scan), por qué será?
El query es:
SELECT KARDEX.id_almacen, descripcion_almacen,
KARDEX.id_localizacion, descripcion_localizacion,
KARDEX.id_parte, descripcion_parte,
EntradaReal, SalidaReal,
EntradaReal2, SalidaReal2,
EntradaComprometido, SalidaComprometido,
EntradaTransito, SalidaTransito
FROM
(
SELECT id_almacen, id_localizacion, id_parte,
SUM(CASE WHEN cantidad_movimiento > 0 AND id_tipoafectareal > 1 THEN cantidad_movimiento ELSE 0 END) as EntradaReal,
SUM(CASE WHEN cantidad_movimiento < 0 AND id_tipoafectareal > 1 THEN cantidad_movimiento*-1 ELSE 0 END) as SalidaReal,
SUM(CASE WHEN cantidad_movimiento > 0 AND id_tipoafectareal2 > 1 THEN cantidad_movimiento ELSE 0 END) as EntradaReal2,
SUM(CASE WHEN cantidad_movimiento < 0 AND id_tipoafectareal2 > 1 THEN cantidad_movimiento*-1 ELSE 0 END) as SalidaReal2,
SUM(CASE WHEN cantidad_movimiento > 0 AND id_tipoafectacomprometido > 1 THEN cantidad_movimiento ELSE 0 END) as EntradaComprometido,
SUM(CASE WHEN cantidad_movimiento < 0 AND id_tipoafectacomprometido > 1 THEN cantidad_movimiento*-1 ELSE 0 END) as SalidaComprometido,
SUM(CASE WHEN cantidad_movimiento > 0 AND id_tipoafectatransito> 1 THEN cantidad_movimiento ELSE 0 END) as EntradaTransito,
SUM(CASE WHEN cantidad_movimiento < 0 AND id_tipoafectatransito > 1 THEN cantidad_movimiento*-1 ELSE 0 END) as SalidaTransito
FROM (
SELECT MOVI.id_almacen, MOVI.id_localizacion, MOVI.id_parte, cantidad_movimiento,
id_tipoafectareal, id_tipoafectareal2, id_tipoafectacomprometido, id_tipoafectatransito
FROM def_movimiento MOVI JOIN def_traninve TINV ON MOVI.id_traninve = TINV.id_traninve
JOIN def_parte PART ON MOVI.id_parte = PART.id_parte
WHERE serial_parte = '0'
AND fecha_movimiento BETWEEN '1/1/2007' AND '31/12/2007'
) MOVIMIENTO
GROUP BY id_almacen, id_localizacion, id_parte
) KARDEX
JOIN def_almacen ALMA ON KARDEX.id_almacen = ALMA.id_almacen
JOIN def_localizacion LOCA ON KARDEX.id_almacen = LOCA.id_almacen AND KARDEX.id_localizacion = LOCA.id_localizacion
JOIN def_parte PART ON KARDEX.id_parte = PART.id_parte
Y su plan de ejecucción es:
"Nested Loop (cost=892.02..914.13 rows=1 width=153)"
" -> Hash Join (cost=892.02..910.32 rows=1 width=121)"
" Hash Cond: ((kardex.id_almacen = loca.id_almacen) AND (kardex.id_localizacion = loca.id_localizacion))"
" -> Hash Join (cost=887.90..906.13 rows=5 width=81)"
" Hash Cond: (kardex.id_almacen = alma.id_almacen)"
" -> HashAggregate (cost=886.78..902.30 rows=194 width=32)"
" -> Hash Join (cost=197.81..881.45 rows=194 width=32)"
" Hash Cond: (movi.id_traninve = tinv.id_traninve)"
" -> Hash Join (cost=196.20..877.17 rows=194 width=20)"
" Hash Cond: (movi.id_parte = part.id_parte)"
" -> Seq Scan on def_movimiento movi (cost=0.00..606.63 rows=19305 width=20)"
" Filter: ((fecha_movimiento >= '2007-01-01 00:00:00'::timestamp without time zone) AND (fecha_movimiento <= '2007-12-31 00:00:00'::timestamp without time zone))"
" -> Hash (cost=195.07..195.07 rows=91 width=4)"
" -> Bitmap Heap Scan on def_parte part (cost=4.96..195.07 rows=91 width=4)"
" Recheck Cond: ((serial_parte)::text = '0'::text)"
" -> Bitmap Index Scan on idx_parte_serial (cost=0.00..4.93 rows=91 width=0)"
" Index Cond: ((serial_parte)::text = '0'::text)"
" -> Hash (cost=1.27..1.27 rows=27 width=20)"
" -> Seq Scan on def_traninve tinv (cost=0.00..1.27 rows=27 width=20)"
" -> Hash (cost=1.05..1.05 rows=5 width=21)"
" -> Seq Scan on def_almacen alma (cost=0.00..1.05 rows=5 width=21)"
" -> Hash (cost=2.85..2.85 rows=85 width=52)"
" -> Seq Scan on def_localizacion loca (cost=0.00..2.85 rows=85 width=52)"
" -> Index Scan using key_parte on def_parte part (cost=0.00..3.79 rows=1 width=36)"
" Index Cond: (kardex.id_parte = part.id_parte)"
Gracias.
Atentamente,
RAUL DUQUE
Bogotá, Colombia
From | Date | Subject | |
---|---|---|---|
Next Message | Alejandro D. Burne | 2007-09-11 15:30:06 | Re: Restore, AYUDA !!! |
Previous Message | Raul Andres Duque | 2007-09-11 14:54:14 | No se usa indice |