Página 1 de 1

OPTIMIZAR PROCEDIMIENTO ALMACENADO

NotaPublicado: Jue Abr 02, 2009 9:12 am
por pelacuaz
Hola a todos:

Tengo problemas con el tiempo de ejecucion de un procedimiento almacenado que me devuelve cantidades mensuales, el cual tarda 45 min en dar el resultado completo, lo curioso es que tengo otro casi igual que me devuelve costos mensuales y tarda 12 min. La funcion al final me devuelve 1189 filas y 84 columnas. Las tablas que utilizo son: manoobra_obra de 9716 filas, mat_vales de 15595 filas, obras de 1189 filas y materialesobra de 21442 filas.

Aqui expondre de manera general lo que hace mi funcion (que devuelve cantidades y tarda mucho :cry: ), si alguien necesita los procedimiento completos con gusto los mando.

*** BD: Informix

ACEPTO TODO TIPO DE PROPUESTAS, COMENTARIOS, SUGERENCIAS Y DEMAS; No importa si cambio la logia siempre y cuando el resultado sea el mismo, lo importante para mi es lograr que con obtenga el mismo resultado tal vez aunque no sea con el procedimiento almacenado pero si en menor tiempo de respuesta.
SALUDOS

foreach
select no, nombre, division, anio_obra, zona
into v_noobra, v_obra, v_div, v_anio, v_nomzona
from obras ORDER BY nombre ASC

select sum(cant) into v_matpene from materialesobra
where fechavencimiento like p_anio||'/01/__' and noobra=v_noobra;
select sum(cantidad) into v_matrene from mat_vales
where fechasalidaalmacen like p_anio||'/01/__' and numobrascod=v_noobra;
...
select sum(cant) into v_matpdic from materialesobra
where fechavencimiento like p_anio||'/12/__' and noobra=v_noobra;
select sum(cantidad) into v_matrdic from mat_vales
where fechasalidaalmacen like p_anio||'/12/__' and numobrascod=v_noobra;

select sum(programado) into v_manopene from manoobra_obra
where fechavencimiento like p_anio||'/01/__' and noobra=v_noobra;
...
select sum(programado) into v_manopdic from manoobra_obra
where fechavencimiento like p_anio||'/12/__' and noobra=v_noobra;

select sum(real) into v_manorene from manoobra_obra
where fechavencimiento like p_anio||'/01/__' and noobra=v_noobra;
....
select sum(real) into v_manordic from manoobra_obra
where fechavencimiento like p_anio||'/12/__' and noobra=v_noobra;

let v_totpene=v_matpene+v_manopene; let v_totrene=v_matrene+v_manorene;
...
return v_nomzona, v_obra, v_anio, v_mat, v_mo, v_tot, v_matp, v_matr, v_mop, v_mor, v_totp, v_totr,
v_matpene, v_matrene, ...
... v_manopdic, v_manordic, v_totpene, v_totrene, ... with resume;
end foreach;

ADJUNTO REPORTE EL CUAL SE ALIMENTA DE ESTE RESULTADO (Un DataTable/Tabla)

Re: OPTIMIZAR PROCEDIMIENTO ALMACENADO

NotaPublicado: Lun Abr 06, 2009 9:58 am
por Ftanori
Quizas sea un problema de indices, revisa tus indices, y crea unos donde sea necesario


Saludos

Re: OPTIMIZAR PROCEDIMIENTO ALMACENADO

NotaPublicado: Lun Abr 06, 2009 11:58 am
por pelacuaz
Hola:

Gracias por interesarte en mi problematica, de antemano te agradezco.

Pues mira estos son mis tablas y sus indices:
mat_vales: mvare, mvbod, tipo_movimiento, anio, numero, codigo
Manoobra_obra: noobra, nomanoobra
materialesobra: i
obras: no

la columna: no de la tabla obras es el unico indice q uso.

nose mucho de indices, pero como suguieres que haga uso de ellos para optimizar mi consulta. Espero y puedas explicarme donde crear esos indices o indices de que columnas y como usarlos en mi query.

SALUDOS

Re: OPTIMIZAR PROCEDIMIENTO ALMACENADO

NotaPublicado: Jue Jun 11, 2009 8:49 am
por Tnolock
si te sirve aun... pudes mostrar los procedimientos almacenados.


con gusto te ayudo