Pruebalo de esta forma:
Código sql:
Ver originalDELIMITER $$
DROP PROCEDURE IF EXISTS `rrserver`.`Informe Agentes`$$
CREATE PROCEDURE `Informe Agentes`(
inicio datetime,
fin datetime,
vestado VARCHAR(15),
empleador VARCHAR(20),
vcargo VARCHAR(15))
BEGIN
SELECT
u.nombreapellido NOMBRE,
u.portalid USERPORTAL,
m.tipo_turno `TIPO TURNO`,
SUM(IF(c.numero_consulta IS NULL, 0, 1)) `CONSULTAS`,
SUM(IF(b.usuario_ingreso IS NULL, 0, 1)) `BOLETAS`,
SUM(IF(r.numero_requerimiento IS NULL, 0, 1)) `REQUERIMIENTOS`,
SUM(IF(t.recibido IS NULL, 0, 1)) `LLAMADAS`
FROM rrserver.usuarios u
INNER JOIN monitoreo.agentes m USING(userid)
LEFT JOIN portalreflex.consultas c ON c.usuario_ingreso = u.portalid
LEFT JOIN portalreflex.requerimientos r ON r.usuario_ingreso = u.portalid
LEFT JOIN rrserver.agente_15minutos t ON
WHERE
m.estado LIKE vestado AND
m.empleador_agente LIKE empleador AND
m.cargo LIKE vcargo
GROUP BY u.userid
ORDER BY u.nombreapellido ASC;
END$$
DELIMITER ;
El problema que tienes es que cada subconsulta en el SELECT se ejecuta una vez por cada campo y por cada registro, de modo que si tienes 5000 registros, esos select corren 20.000 veces en una sola ejecución. No es eficiente.
Tips:
1. No pongas los mismos nombres en las variables que en los campos que usas. Esto puede confundir al parser de MySQL y dar lugar a errores porque MySQL prioriza los campos y las tablas por sobre las variables.
2. La respuesta a tu pregunta del código está en :
Nuevo resaltador de código Geishi - Foros del Web