Ver Mensaje Individual
  #2 (permalink)  
Antiguo 15/05/2009, 07:01
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Optimizar consulta

Pruebalo de esta forma:
Código sql:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `rrserver`.`Informe Agentes`$$
  4.  
  5. CREATE PROCEDURE `Informe Agentes`(
  6.   inicio    datetime,
  7.   fin       datetime,
  8.   vestado    VARCHAR(15),
  9.   empleador VARCHAR(20),
  10.   vcargo     VARCHAR(15))
  11. BEGIN
  12.   SELECT
  13.     u.nombreapellido NOMBRE,
  14.     u.portalid USERPORTAL,
  15.     m.tipo_turno `TIPO TURNO`,
  16.     SUM(IF(c.numero_consulta IS NULL, 0, 1)) `CONSULTAS`,
  17.     SUM(IF(b.usuario_ingreso IS NULL, 0, 1)) `BOLETAS`,
  18.     SUM(IF(r.numero_requerimiento IS NULL, 0, 1)) `REQUERIMIENTOS`,
  19.     SUM(IF(t.recibido IS NULL, 0, 1)) `LLAMADAS`
  20.   FROM rrserver.usuarios u
  21.     INNER JOIN monitoreo.agentes m USING(userid)
  22.     LEFT JOIN portalreflex.consultas c ON c.usuario_ingreso = u.portalid
  23.     LEFT JOIN portalreflex.requerimientos r ON r.usuario_ingreso = u.portalid
  24.     LEFT JOIN rrserver.agente_15minutos t ON
  25.   WHERE
  26.     m.estado LIKE vestado AND
  27.     m.empleador_agente LIKE  empleador AND
  28.     m.cargo LIKE vcargo
  29.   GROUP BY u.userid
  30.   ORDER BY u.nombreapellido ASC;
  31. END$$
  32.  
  33. 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
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)