Ir para conteúdo
Fórum Script Brasil
  • 0

Como otimizar consulta?


Tchello

Pergunta

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.
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

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).

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...