Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/05/2009, 06:27
chelodelsur
 
Fecha de Ingreso: abril-2008
Mensajes: 208
Antigüedad: 16 años, 1 mes
Puntos: 2
Optimizar consulta

Hola a todos
Nuevamente recurriendo a su ayuda.
Tengo este codigo, que recoge datos de 6 tablas distintas que están en 3 bases, ubicadas en un mismo host. La consulta la tengo dentro de un SP para entregar solo el "Call" a la aplicación cliente.
Bien la consulta en sí se ejecuta bien (levanta los datos) pero demora 35 segundos en hacerlo.
MI pregunta es como podría mejorar este tiempo

Desde ya gracias

Código:
DELIMITER $$

DROP PROCEDURE IF EXISTS `rrserver`.`Informe Agentes`$$

CREATE DEFINER=`root`@`%` PROCEDURE `Informe Agentes`(inicio datetime, 
                                                         fin datetime,
                                                      estado varchar(15),
                                                   empleador varchar(20),
                                                       cargo varchar(15))
BEGIN
Select
u.nombreapellido NOMBRE,
u.portalid USERPORTAL,
m.tipo_turno `TIPO TURNO`,
IFNULL((
        SELECT COUNT(c.numero_consulta)
        FROM portalreflex.consultas c
        WHERE c.usuario_ingreso = u.portalid
        AND c.fecha_ingreso between inicio AND fin
        GROUP BY c.usuario_ingreso
        ),0) `CONSULTAS`, /* Ejecuta una  sub consulta a la tabla consultas*/
IFNULL((
        SELECT count(b.usuario_ingreso)
        FROM portalreflex.boletas b
        WHERE b.usuario_ingreso = u.portalid
        AND b.fecha_ingreso between inicio AND fin
        GROUP BY b.usuario_ingreso
        ),0) `BOLETAS`,
IFNULL((
        SELECT COUNT(r.numero_requerimiento)
        FROM portalreflex.requerimientos r
        WHERE r.usuario_ingreso = u.portalid
        AND r.fecha_ingreso between inicio AND fin
        GROUP BY r.usuario_ingreso
        ),0) `REQUERIMIENTOS`,
IFNULL((
        SELECT SUM(t.recibido)
        FROM rrserver.agente_15minutos t
        WHERE t.userid = u.userid
        AND t.fecha between inicio AND fin
        GROUP BY t.userid
        ),0) LLAMADAS
FROM rrserver.usuarios u  
INNER JOIN monitoreo.agentes m
ON u.userid = m.userid
WHERE m.estado LIKE estado
AND m.empleador_agente LIKE  empleador
AND m.cargo LIKE cargo
GROUP BY u.userid
ORDER BY u.nombreapellido asc;   
    END$$

DELIMITER ;

PD: una pregunta al margen, como lo hacen para etiquetar codigos sql en el foro ???