Ver Mensaje Individual
  #6  
Antiguo 10-08-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 26
guillotmarc Va por buen camino
Hola. En efecto, lo primero que tienes que hacer es pasar la consulta a JOINS explícitos, la consulta de esta forma es todo un desafío para cualquier motor. Además que no entiendo porqué haces así las consultas de buen principio, resulta mucho más fácil y sencillo el construirlas con JOINS desde el inicio.
Código SQL [-]
select  r.nro_recibo,cast(r.fecha as date),d.ap_paterno||' '||d.ap_materno||' '||d.nombres||'-->'||e.nombre_e, case r.porcentaje_cobro when 100 then  c.costo else (r.porcentaje_cobro*c.costo)/100 end,r.costo_total,r.literal,r.nro_ambulatorio,r.usuario,r.tipo_paciente,r.nro_asegurado,r.nro_intern  acion,r.factura,cast(r.fecha as time),r.monto_cobrar,r.porcentaje_cobro,c.nro,r.nro_factura from recibo r,registro_consulta_med c,c_externa c1,doctor d,especialidad e where ((r.nro_recibo=c.nro_recibo)and(c.nro_consulta=c1.nro)and(c1.id_doctor=d.ci)and(d.esp=e.nro)and(cast  (r.fecha as date) between :f1 and :f2)and((r.cancelado=:valor)or(r.cancelado='M')))
Esta consulta es equivalente a :
Código SQL [-]
select  r.nro_recibo,cast(r.fecha as date),d.ap_paterno||' '||d.ap_materno||' '||d.nombres||'-->'||e.nombre_e, case r.porcentaje_cobro when 100 then  c.costo else (r.porcentaje_cobro*c.costo)/100 end,r.costo_total,r.literal,r.nro_ambulatorio,r.usuario,r.tipo_paciente,r.nro_asegurado,r.nro_intern  acion,r.factura,cast(r.fecha as time),r.monto_cobrar,r.porcentaje_cobro,c.nro,r.nro_factura from recibo r      inner join registro_consulta_med c on (r.nro_recibo=c.nro_recibo)      inner join c_externa c1 c.nro_consulta=c1.nro      inner join doctor d on c1.id_doctor=d.ci      inner join especialidad e on d.esp=e.nro where (r.fecha between :f1 and :f2 + 1) and (r.cancelado=:valor or r.cancelado='M')
En principio con un índice sobre el campo fecha de la tabla recibo vas a tener bastante para que esta consulta se ejecute rápido.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita