Ayuda con consulta pesada
Publicado por Hector (1 intervención) el 23/10/2014 22:28:51
Hola!
Tengo un problemón con una consulta bastante pesada que me da la disponibilidad de un hospital para poder pedir cita desde internet.
Por si sola tarda un segundo para una fecha concreta, el problema viene cuando tengo que llamarla 365 veces para sacar la disponibilidad de todo un año día por día. mostrando a los médicos los huecos del año (Es un requisito).
He probado metiéndola en un bucle que va haciendo las consultas como la de abajo e incluso creando una consulta enorme con varios unión entre si pero tarda muchísimo y da la sensación de que se ha quedado colgado el sistema. alguien me podría dar algún truco para mejorar la consulta? es la siguiente:
Muchisimas gracias por todo de antemano!
Tengo un problemón con una consulta bastante pesada que me da la disponibilidad de un hospital para poder pedir cita desde internet.
Por si sola tarda un segundo para una fecha concreta, el problema viene cuando tengo que llamarla 365 veces para sacar la disponibilidad de todo un año día por día. mostrando a los médicos los huecos del año (Es un requisito).
He probado metiéndola en un bucle que va haciendo las consultas como la de abajo e incluso creando una consulta enorme con varios unión entre si pero tarda muchísimo y da la sensación de que se ha quedado colgado el sistema. alguien me podría dar algún truco para mejorar la consulta? es la siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT count(habitaciones.tipoHabitacion) as total
FROM habitaciones
WHERE habitaciones.idhospital= '1' AND habitaciones.tipoHabitacion = '127'
AND habitaciones.online = '1'
AND habitaciones.idHabitacion NOT IN
(SELECT bloqueoHabitaciones.idHabitacion
FROM bloqueoHabitaciones WHERE bloqueoHabitaciones.idhospital = '1'
AND NOT (DATE(bloqueoHabitaciones.fechaInicial) >= DATE('" + fechaFin + "')
OR DATE(bloqueoHabitaciones.fechaFinal) <= DATE('" + fechaInicio + "')))
AND habitaciones.idHabitacion NOT IN
(SELECT reservas.idHabitacion FROM reservas WHERE reservas.idhospital = '1'
AND reservas.estado !='Eliminada' AND reservas.estado !='No Show' AND reservas.estado !='Reserva cancelada'
AND not (DATE(reservas.fechaEntrada) >= DATE('" + fechaFin + "')
OR DATE(reservas.fechaSalida) <= DATE('" + fechaInicio + "')))
Muchisimas gracias por todo de antemano!
Valora esta pregunta


0