Ir para conteúdo

POWERED BY:

Arquivado

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

rodrigopaivaf

Select em duas tabelas

Recommended Posts

Olá pessoal,

 

Eu fiz um sistema em php que acessa um db com mais de 10 milhores de registros ao mês!!! Eu fiz o possível pra torná-lo mais rápido no php mais não tem jeito. Nós criamos indice no banco e começamos a usar foreign key mas mesmo assim a consulta demora de 2 a 5 minutos.

 

Bom, eu tenho duas querys nas quais pensei em otimizar. A primeira eu faço esse select numa tabela temporária:

 


SELECT distinct d.callid as calliddif, max(d.id_result) as id_result, s.title as dac,
min(d.data) as data, CASE WHEN min(d.classifier)=1 THEN 'Atendido' ELSE 'Não Atendido' END as atendimento, d.callid,
max(d.numa) as numa, min(d.classifier) as classifier,
max(d.connection_id) as connection_id, d.login, max(d.skill) as skill,
IF(max(d.ramal)>1,max(d.ramal),'Nenhum') as ramal
FROM int_temp_callid d
inner join tbconnections s on (s.id = d.connection_id)
where d.data >= '2009-10-15 00:00:00' and d.data <= '2009-10-15 23:59:59'  and d.login='paiva'
and d.session_id='oh8kec685mbosn6n66pg3jo0a2'
and d.classifier in (1,6) group by d.callid;

O segundo, eu faço o select linha a linha (o select fica dentro de um while no php)

 


Select * from tbresult_cti i where i.station = 56015
and i.connection_id = 1 and i.classifier = 16
and i.dt_inserted >= '2009-10-15 11:15:31'
and i.dt_inserted <= DATE_ADD('2009-10-15 11:15:31', INTERVAL 2 HOUR) limit 1

Eu tenho como usar o left outer join ou algum comando que me permite executar esse segundo select junto com o primeiro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem q ter indice em todos os pontos de junçao , em todos os where e no group by e trocar o inner join por where =

 

soh que no geral essa sua consulta em embaçada, pq tem mta funcao de agregacao e distinct misturado com group by , o q nao faz sentido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

FROM int_temp_callid d

inner join tbconnections s on (s.id = d.connection_id)

 

 

 

FROM int_temp_callid d ,tbconnections s

where s.id = d.connection_id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, não sabia que funcionava assim, ficou mais rápido. Mas giesta, eu tenho o outro select. Tenho como relaciona-lo com esse select principal? Porque o que demora e ter que gerar um select por linha já que está dentro de um while.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ter tem, mas eu teria q entender a logica dessas suas tabelas.

 

Uma coisa importante é : você precisa de todos os campos na segunda consulta (select *) ? caso nao precise, puxe soh o q você precisa q ja da uma melhorada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim eu uso todos os campos da outra tabela. Pra você entender melhor a lógica eu vou explicar:

 

Eu preciso das informações do primeiro select pra montar o segundo. Eu crio um array com os resultados do primeiro select, e pego as informações do ramal de cada linha e checo na outra tabela pra achar o login do agente. Entendeu?

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.