Lentidão Stored Procedure MySql

Olá Todos!

Gostaria de uma ajuda na seguinte situação de lentidão em uma consulta ao Banco de Dados MySql.

Tenho a consulta abaixo que retorna 2670 registros em 0,0610 segundos.
E tenho uma Stored Procedure que retorna os mesmos 2670 registros em 16,3150 segundos.

Não consigo entender o motivo de tanto tempo para retornar os dados quando é pela Stored Procedure.
Como podem observar não tem muita coisa no corpo da stored procedure.

Já pesquisei bastante sobre o assunto de otimização com mysql mas sem sucesso com relação ao assunto.

Consulta

select laudos.co_hospital, laudos.co_paciente, laudos.dt_transf_web, laudos.hr_transf_web, 
       laudos.nm_tabela_origem, laudos.co_tabela_sequencial, laudos.tx_laudo, laudos.in_liberado_web
       
from   laudos
       
where  laudos.dt_transf_web            >= '1900-01-01' and laudos.dt_transf_web            <= '2017-01-09' and 
       laudos.co_paciente              >= 1            and laudos.co_paciente              <= 999999999    and
       laudos.co_medico_crm_solicitan  >= 1            and laudos.co_medico_crm_solicitan  <= 999999999    and
       laudos.co_tabela_patologia      >= 1            and laudos.co_tabela_patologia      <= 999999999    and
       laudos.co_hospital               = 291
order by co_paciente

Stored Procedure

DELIMITER $$
CREATE PROCEDURE PROC_LAUDOS_SELECT(

   IN WW_DATA_I                        DATE,
   IN WW_DATA_F                        DATE,
   IN WW_CO_PACIENTE                   INTEGER,
   IN WW_CO_MEDICO_CRM_SOLICITAN       INTEGER,
   IN WW_CO_TABELA_PATOLOGIA           INTEGER,
   IN WW_CO_HOSPITAL                   INTEGER,
   IN WW_IN_ORIGEM_ACESSO              CHAR(1),
   IN WW_TIPO_LISTAGEM                 CHAR(1))
   
   
BEGIN
   

   /*{*** Início do Corpo da Procedure ***}*/
   BEGIN
   
      SET WW_CO_PACIENTE_I               = 1;
      SET WW_CO_PACIENTE_F               = 999999999;
      SET WW_CO_MEDICO_CRM_SOLICITAN_I   = 1;
      SET WW_CO_MEDICO_CRM_SOLICITAN_F   = 999999999;
      SET WW_CO_TABELA_PATOLOGIA_I       = 1;
      SET WW_CO_TABELA_PATOLOGIA_F       = 999999999;

      IF (WW_CO_PACIENTE > 0) THEN 
         SET WW_CO_PACIENTE_I = WW_CO_PACIENTE;
         SET WW_CO_PACIENTE_F = WW_CO_PACIENTE;
      END IF;
      
      IF (WW_CO_MEDICO_CRM_SOLICITAN > 0) THEN 
         SET WW_CO_MEDICO_CRM_SOLICITAN_I = WW_CO_MEDICO_CRM_SOLICITAN;
         SET WW_CO_MEDICO_CRM_SOLICITAN_F = WW_CO_MEDICO_CRM_SOLICITAN;
      END IF;
      
      IF (WW_CO_TABELA_PATOLOGIA > 0) THEN 
         SET WW_CO_TABELA_PATOLOGIA_I = WW_CO_TABELA_PATOLOGIA;
         SET WW_CO_TABELA_PATOLOGIA_F = WW_CO_TABELA_PATOLOGIA;
      END IF;
      
      

      SELECT LAUDOS.CO_HOSPITAL, LAUDOS.CO_PACIENTE, LAUDOS.DT_TRANSF_WEB, LAUDOS.HR_TRANSF_WEB, 
             LAUDOS.NM_TABELA_ORIGEM, LAUDOS.CO_TABELA_SEQUENCIAL, LAUDOS.TX_LAUDO, LAUDOS.IN_LIBERADO_WEB
             
      FROM   LAUDOS
             
      WHERE  LAUDOS.DT_TRANSF_WEB            >= WW_DATA_I                         AND LAUDOS.DT_TRANSF_WEB            <= WW_DATA_F                    AND 
             LAUDOS.CO_PACIENTE              >= WW_CO_PACIENTE_I                  AND LAUDOS.CO_PACIENTE              <= WW_CO_PACIENTE_F             AND
             LAUDOS.CO_MEDICO_CRM_SOLICITAN  >= WW_CO_MEDICO_CRM_SOLICITAN_I      AND LAUDOS.CO_MEDICO_CRM_SOLICITAN  <= WW_CO_MEDICO_CRM_SOLICITAN_F AND
             LAUDOS.CO_TABELA_PATOLOGIA      >= WW_CO_TABELA_PATOLOGIA_I          AND LAUDOS.CO_TABELA_PATOLOGIA      <= WW_CO_TABELA_PATOLOGIA_F     AND
             LAUDOS.CO_HOSPITAL               = WW_CO_HOSPITAL;
      
   END;
   
END $$
   
DELIMITER ;
COMMIT;

Inovaes, pode ser que não postou toda sp, mas não vi a declaração das variaveis, só tem os sets.

Sugiro que faça testes, por exemplo:

  1. Coloca na sua sp so select, já com os valores fixos, chama a sp e veja o resultado.
  2. Execute o select com explain, pra ver se não é possível otimiza-la.
  3. Veja se não é necessário o uso de índices nas tabelas.

Espero ter ajudado.

_ _
Fabiano Abreu
Papo SQL