Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luiz Otávio Foreba

Velocidade da consulta MySQL em duas tabelas

Recommended Posts

Olá amigos, tenho duas tabelas no banco de dados, uma com o cadastro do cliente e outra para gerar um valor mensal de pagamentos. No último mês precisei fazer uma consulta unindo os dados das duas tabelas, preciso saber o valor e o mês que o cliente deve e também preciso pegar o nome, cpf, endereço e tudo mais na tabela de cadastro.

 

Eu fiz de um modo que não sei se está certo, funcionou mais ficou muito lenta a consulta, veja abaixo:

 

SELECT 
tabela_clientes.nome, 
tabela_clientes.cpf_cnpj, 
tabela_clientes.endereco, 
tabela_clientes.telefone, 
tabela_clientes.codigo_cliente, 
tabela_geracao.valor_mensalidade 
FROM tabela_clientes, tabela_geracao 
WHERE tabela_clientes.codigo_cliente = tabela_geracao.codigo_cliente 
AND tabela_geracao.codigo_cliente LIKE '%".$data."%' 
AND tabela_geracao.bloqueado = 0 
GROUP BY tabela_clientes.codigo_cliente 
ORDER BY tabela_clientes.nome ASC

 

tabela_geracao.bloqueado = 0 quer dizer que não desejo que o resultado traga os valores dos clientes bloqueados.

 

Já mudei e gastei todo o conhecimento que tinha e não consegui resolver a lentidão, se puderem me ajudar eu agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

As colunas codigo_cliente e bloqueado estão com indice INDEX? Caso essa sua consulta seja usado frequentemente, era bom que essas duas colunas tivessem indices!

Compartilhar este post


Link para o post
Compartilhar em outros sites

AND tabela_geracao.codigo_cliente LIKE '%".$data."%' 

 

Este LIKE aqui mata a query de paulada :), sendo código (PK) melhor procurar por igual

 

AND tabela_geracao.codigo_cliente = '%".$data."%' 

 

Deixe o like para buscas parciais , veja o manual para mais detalhes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

AND tabela_geracao.codigo_cliente LIKE '%".$data."%' 

 

Este LIKE aqui mata a query de paulada :), sendo código (PK) melhor procurar por igual

 

AND tabela_geracao.codigo_cliente = '%".$data."%' 

 

Deixe o like para buscas parciais , veja o manual para mais detalhes.

 

Amigão, ficou assim agora e já melhorou bastante:

 

SELECT tabela_clientes.nome,
      tabela_clientes.cpf_cnpj,
      tabela_clientes.endereco,
      tabela_clientes.telefone,
      tabela_clientes.codigo_cliente,
      tabela_geracao.valor_mensalidade
FROM   tabela_clientes
      INNER JOIN tabela_geracao
        ON tabela_clientes.codigo_cliente = tabela_geracao.codigo_cliente
WHERE  tabela_geracao.codigo_cliente = '".$data."'
      AND tabela_geracao.bloqueado = 0
ORDER  BY tabela_clientes.nome ASC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem uma outra coisa aí... Você está fazendo um select em várias tabelas.

Certifique-se de colocar as tabelas com menos dados sempre à esquerda.

O algoritmo de busca pelos dados funciona melhor assim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.