neotheone 0 Denunciar post Postado Janeiro 27, 2009 Oi pessoal beleza? Essa minha query está levando em média 23 segundo para executar, alguem consegue enxergar algum error ou alguma forma de melhorar o desempenho? SELECT tblORD.ordem_judicial, if(tblIDE.id_solicitacao is NULL, tblINT.id_solicitacao, tblIDE.id_solicitacao) as solicitacao, tipo, tblSER.servico, usuario_encontrado, ip, data_tratamento as DataEntrada , if(tbIDEDataInicio.dataInicio is NULL, tbINTDataInicio.dataInicio, tbIDEDataInicio.dataInicio) as DataInicio, if(tbIDEDataFim.dataFim is NULL, tbINTDataFim.dataFim, tbIDEDataFim.dataFim) as DataFim, if(tblIDE.analista is NULL, tblINT.analista, tblIDE.analista) as analista, if(tbIDEDataInicio.dataInicio is NULL, TIMEDIFF(tbINTDataFim.dataFim, tbINTDataInicio.dataInicio), TIMEDIFF(tbIDEDataFim.dataFim, tbIDEDataInicio.dataInicio)) as tempo, if(TIME_TO_SEC(if(tbIDEDataInicio.dataInicio is NULL, TIMEDIFF(tbINTDataFim.dataFim, tbINTDataInicio.dataInicio), TIMEDIFF(tbIDEDataFim.dataFim, tbIDEDataInicio.dataInicio))) > 259200, 'Fora do Prazo', 'No Prazo') as indicador FROM tbl_Servicos as tblSER INNER JOIN tbl_ordem_judicial AS tblORD LEFT JOIN tbl_Identificacao_Usu as tblIDE on tblIDE.fk_ordem_judicial = tblORD.id_ordem LEFT JOIN tbl_Interceptacao_Usu as tblINT on tblINT.fk_ordem_judicial = tblORD.id_ordem LEFT JOIN tbl_TOJ_Identificacao as tblTIDE on tblTIDE.fk_id_solicitacao = tblIDE.id_solicitacao LEFT JOIN tbl_TOJ_Interceptacao as tblTINT on tblTINT.fk_id_solicitacao = tblINT.id_solicitacao left join ( select fk_id_solicitacao, min(concat(data_modificacao,' ',hora_modificacao)) as dataInicio from tbl_Historico where fk_status = 2 group by fk_id_solicitacao) as tbIDEDataInicio on tbIDEDataInicio.fk_id_solicitacao = tblIDE.id_solicitacao left join ( select fk_id_solicitacao, max(concat(data_modificacao,' ',hora_modificacao)) as dataFim from tbl_Historico where fk_status = 7 group by fk_id_solicitacao) as tbIDEDataFim on tbIDEDataFim.fk_id_solicitacao = tblIDE.id_solicitacao left join ( select fk_id_solicitacao, min(concat(data_modificacao,' ',hora_modificacao)) as dataInicio from tbl_Historico where fk_status = 2 group by fk_id_solicitacao) as tbINTDataInicio on tbINTDataInicio.fk_id_solicitacao = tblINT.id_solicitacao left join ( select fk_id_solicitacao, max(concat(data_modificacao,' ',hora_modificacao)) as dataFim from tbl_Historico where fk_status = 7 group by fk_id_solicitacao) as tbINTDataFim on tbINTDataFim.fk_id_solicitacao = tblINT.id_solicitacao WHERE (tblTIDE.tipo_servico = tblSER.id_servico or tblTINT.tipo_servico = tblSER.id_servico) Compartilhar este post Link para o post Compartilhar em outros sites
Tash 5 Denunciar post Postado Janeiro 27, 2009 Use o EXPLAIN, veja o plano de execução e detecte possíveis índices necessários ;) Análise de queries é algo complexo... http://dev.mysql.com/doc/refman/5.0/en/explain.html Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Janeiro 27, 2009 1. qual o volume de dados dentro das tabelas relacionadas ? quantos registros ? 100 mil ? 800 mil ? 5 milhoes ? 20 milhoes ? Compartilhar este post Link para o post Compartilhar em outros sites
hinom 5 Denunciar post Postado Janeiro 28, 2009 verfiique também se está ativado "slow_query_log" se estiver ativado, verifique qual o arquivo de logs está sendo usado para saber qual o arquivo, veja o valor apontado por "slow_query_log_file" Compartilhar este post Link para o post Compartilhar em outros sites