2010/10/8 Martin Li Causi <[email protected]>: > > > 2010/10/7 Alvaro Herrera <[email protected]> >> >> Excerpts from Martin Li Causi's message of jue oct 07 06:49:44 -0400 2010: >> >> > > AC.ID_ANORMALIDAD_CALC_REEMPLAZO IS NULL AND >> > > AC.ID_PROCESO IN ( >> > > SELECT MAX(PROCESO_PERSONA_JORNADA.ID_PROCESO) >> > > FROM PROCESO_PERSONA_JORNADA >> > > WHERE >> > > AC.ID_PERSONA = >> > > PROCESO_PERSONA_JORNADA.ID_PERSONA AND >> > > AC.ID_FECHA_JORNADA = >> > > PROCESO_PERSONA_JORNADA.ID_FECHA_JORNADA >> > > ) and >> >> Este subselect es lo que está usando la mayor parte del tiempo de la >> consulta ... Corresponde al "SubPlan 1" en esta parte del explain: >> >> > " -> Index Scan using idx_anor_calc_fj on >> > anormalidad_calculo ac (cost=0.00..7495125.36 rows=165749 width=48) >> > (actual >> > time=1.813..268719.645 rows=467571 loops=1)" >> > " Filter: ((id_anormalidad_calc_reemplazo >> > IS NULL) AND (id_tipo_justificacion = ANY >> > ('{3,5,4,6,2,10,9,1,7}'::bigint[])) AND (SubPlan 1))" >> > " SubPlan 1" >> > " -> Aggregate (cost=15.93..15.94 >> > rows=1 width=8) (actual time=0.571..0.571 rows=1 loops=467646)" >> > " -> Bitmap Heap Scan on >> > proceso_persona_jornada (cost=11.91..15.92 rows=1 width=8) (actual >> > time=0.564..0.565 rows=1 loops=467646)" >> > " Recheck Cond: (($0 = >> > id_persona) AND ($1 = id_fecha_jornada))" >> > " -> BitmapAnd >> > (cost=11.91..11.91 rows=1 width=0) (actual time=0.562..0.562 rows=0 >> > loops=467646)" >> > " -> Bitmap Index >> > Scan on idx_proceso_persona_jornada_persona (cost=0.00..5.19 rows=118 >> > width=0) (actual time=0.098..0.098 rows=884 loops=467646)" >> > " Index Cond: >> > ($0 = id_persona)" >> > " -> Bitmap Index >> > Scan on idx_proceso_persona_jornada_jornada (cost=0.00..6.46 rows=287 >> > width=0) (actual time=0.451..0.451 rows=3844 loops=467646)" >> > " Index Cond: >> > ($1 = id_fecha_jornada)" >> >> Son 467646 veces por 0.5 segundos cada vez, o sea como 230 segundos de >> los 270 segundos en total. Creo que deberías buscar la manera de >> reformular esto (¿quizás usando una función ventana? ¿Usando un join >> en vez de una subconsulta correlacionada? no sé). Quizás sea necesario >> reformular el modelo. >> >> -- >> Álvaro Herrera <[email protected]> >> The PostgreSQL Company - Command Prompt, Inc. >> PostgreSQL Replication, Consulting, Custom Development, 24x7 support > > > Estimados, mil gracias por la ayuda!! > vamos a ver que puedo hacer para mejorarlo > nuevamnete muchas gracias! >
Tenés un índice por persona y otro por jornada en la tabla de proceso_persona_jornada. Deberías tener uno que sea id_persona/jornada todo junto (o al revés, jornada / persona). Además, podrías cambiar el in por un igual. Saludos! -- Silvio Quadri - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripción: http://www.postgresql.org/mailpref/pgsql-es-ayuda
