Jump to content
Fórum Script Brasil
  • 0

Como otimizar consulta?


Tchello

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...