Tchello Postado Abril 24, 2015 Denunciar Share Postado Abril 24, 2015 Tenho uma consulta que tá lenta, gostaria de saber se há algo que posso fazer para otimizar e acelerar esta consulta? SELECT a.modelo, COUNT( a.modelo ) AS total, COUNT( b.modelo ) AS campo, COUNT( b.baixa ) AS baixas FROM terminais a LEFT JOIN movimentacao b ON a.modelo = b.modelo WHERE a.modelo != '' AND YEAR(a.datacad) = YEAR(CURDATE()) GROUP BY a.modelo ORDER BY a.modelo ASC Dados das tabelas: terminais a = 17610 (registros); movimentacao = 16213 (registros); Atualmente a consulta tá levando em torno de 20 segundos. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Denis Courcy Postado Abril 25, 2015 Denunciar Share Postado Abril 25, 2015 Oi Tchello.A lentidão de sua consulta está aqui:YEAR(a.datacad) = YEAR(CURDATE())Todas as vezes que usar uma função para comparar com outra função ou com uma constante, a consulta se degradará epassará a ser TABLE SCAN (uma varredura completa). Ou seja, perderá o uso precioso dos índices.Isto ocorre porque para cada registro a função YEAR(a.datacad) deverá ser executada para a comparação do ano.YEAR(CURDATE()) é uma constante pois será executada uma única vez pelo motor do MySQL.Se esta consulta for realizada com muita frequência, a solução será criar um campo ANO para abrigar YEAR(a.datacad) e criar um índice por este campo ano.O MySQL ainda não permite a criação de índices por YEAR(a.datacad). Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Tchello
Tenho uma consulta que tá lenta, gostaria de saber se há algo que posso fazer para otimizar e acelerar esta consulta?
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.