Ver Mensaje Individual
  #3  
Antiguo 27-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola,

En este segundo procedimiento almacenado no tienes demasiadas consultas. Ejecútalas manualmente, y verás cual de ellas es la que se demora tanto.

Es decir en IBExpert (o el gestor que utilizes) lanza directamente :

select distinct (l.tipo)
from listado_servicios l
where tipo<>'INTERNACION'

Si se ejecuta rápido, te olvidas de ello y pasas a la siguiente consulta :

select distinct m.usuario
from listado_registro_servicios_amb (:f1, :f2, 'T') m
where (m.tipo_servicio=:tipo_servicio)

Hasta dar con la consulta que va lenta.

Supongamos que efectivamente resulta ser :

select coalesce(sum(case when m.costo is null then 0 else m.costo end),0) as monto_recibo
from listado_registro_servicios_amb (:f1,:f2,'T') m
where ((M.usuario=:USUARIO)AND(m.factura='RECIBO')and(m.tipo_servicio=:tipo_servicio))

Entonces tienes que optimizar la consulta, y para hacerlo se utilizan, como bien has dicho, índices.

Pero crear los índices no es simplemente hacer un índice para cada campo implicado. No, puesto que eso no le sirve al sistema para agilizar una consulta como la anterior.

En ese caso necesitas un índice múltiple, es decir un solo índice con los campos : usuario, factura, tipo_servicio

Si la consulta que te demora la ejecución del procedimiento almacenado resulta ser otra, simplemente dinos cual es y te ayudaremos a definir el índice adecuado para optimizarla.

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita