Ir para conteúdo

Arquivado

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

matheusmarson

Consulta avançada mysql

Recommended Posts

Senhores

 

Estou com um problema com relação a uma consulta mysql onde deve-se trazer dados de várias tabelas e ordenar estes dados

O DB tem um grande número de registros e isso deixa minha consulta muito lenta e acaba dando o erro Query execution was interrupted mesmo limitando a 200 registros por página

 

A consulta é a seguinte:

 

$sql = mysql_query("SELECT p.id, p.data_pedido, p.valor_frete, p.valor_pedido, s.data_acao, s.status_pedido, c.nome, c.tipo, c.cpf, c.login, co.email, co.telefone1, cid.nome_cidade, est.sgl_estado
FROM clientes c, contatos co, enderecos e, cidades cid, estados est, pedidos p
LEFT JOIN pedidos_status s ON s.id_pedido=p.id AND s.id = (
SELECT MAX(st.id)
FROM pedidos_status st
WHERE st.id_pedido=p.id AND (st.status_pedido <> 'Cancelado' AND st.status_pedido <> 'Pedido entregue'))
WHERE p.login=c.login AND co.id_cliente=c.id AND p.id_entrega=e.id AND e.id_cidade=cid.cod_cidade AND cid.cod_estado=est.cod_estado
GROUP BY p.id
ORDER BY p.id DESC
LIMIT 0, 200") or die ("erro: " . mysql_errno($conn) . ", " . mysql_error($conn));
Alguém saberia me dizer se existe uma forma mais eficiente de fazer esta consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vc já otimizou as tabelas ? criou índices e tal ?

 

vou te mover para o fórum de MySQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez o plano de execução da SQL ?

As tabelas tem índices ?

As estatísticas estão atualizadas ?

Este left join com um subselect pode ser alterado ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta

As tabelas todos tem index sim,

Os dados estão atualizados sim

Quanto ao left join tem alguma sugestão de como melhora-lo?



Motta

 

Sobre a criação de index neste caso oque vc me orientaria? Quais criar e quais tabelas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

a query faz joins implícito com 4 tabelas (clientes c, contatos co, enderecos e, cidades cid, estados est, pedidos p) mas não parece ter os "where" de ligação dos campos

 

quanto ao subselect talvez fique melhor fora da condição do join explícito e sim na condição where.

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.