Tchello Posted April 24, 2015 Report Share Posted April 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. Quote Link to comment Share on other sites More sharing options...
0 Denis Courcy Posted April 25, 2015 Report Share Posted April 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). Quote Link to comment Share on other sites More sharing options...
Question
Tchello
Tenho uma consulta que tá lenta, gostaria de saber se há algo que posso fazer para otimizar e acelerar esta consulta?
Link to comment
Share on other sites
1 answer to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.