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;