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

(Resolvido) Como Otimizar consulta com várias tabelas?


Tchello

Pergunta

Tenho a seguinte consulta;

SELECT vts.contrato AS contrato, id, assinante, servico, agendamento, periodo, node, endereco, obs, swap.cd_net AS swap, nodes.regiao AS regiao, COUNT(distinct contrato) AS total FROM vts LEFT JOIN swap ON vts.contrato=swap.cd_net LEFT JOIN nodes ON vts.node=nodes.no WHERE agendamento > CURDATE() AND contrato > 0 AND executada = '' AND assumida = '' GROUP BY contrato ORDER BY agendamento, periodo;

Obs.: são utilizadas 3(três) tabelas nesta consulta vts, swap e nodes.

Está funcionando tudo direitinho, porém está lenta leva entre 8 a 15 secs por consulta. Gostaria de saber se alguém tem alguma dica de como otimizar esta consulta para obter uma resposta mais rápida?

Desde já agradeço a colaboração.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Amigo,

Na cláusula WHERE, identifique se as colunas referenciadas são chaves ou estão indexadas. Faça os testes verificando quais índices o script utiliza.

Coloque as colunas nos respectivos joins das tabelas. Quanto menos dados os joins retornarem, mais rápido a consulta será (pesquisa excludente).

Ex.:

No seu script:

... FROM vts LEFT JOIN swap ON vts.contrato=swap.cd_net...

... WHERE agendamento > CURDATE() AND contrato > 0 ...

Alteração:

... FROM vts LEFT JOIN swap ON vts.contrato=swap.cd_net AND contrato > 0...

... WHERE agendamento > CURDATE() ...

Sempre coloque as chaves / índices nas primeiras posições do relacionamento.

No exemplo acima, caso a coluna "Contrato" seja chave (apenas uma suposição), coloque-a para frente:

... FROM vts LEFT JOIN swap ON contrato > 0 AND vts.contrato=swap.cd_net ...

Faça as alterações no script e teste.

Dúvida: a performance da função CURDATE() está ok? Enquanto ela não retornar o valor desejado, o script não roda. Teste chamar a função por fora, gravando o dado em uma temporária e utilizar a temporária no script principal. Meça o tempo.

Caso as alterações não dê resultado, abra o mapa de execução do script e verifique em qual das tabelas há a % maior de processamento.

Outra forma é utilizar o Tunning do SQL. Ele executa seu script e te passa dicas para otimizar a consulta.

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...