Ir para conteúdo

POWERED BY:

Arquivado

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

LHR

Query lenta

Recommended Posts

Olá pessoal,

 

Estou com um problema.

Possuo 3 tabelas (ITEM, ITEMANTIGO, MANUTENCAO)

A tabela MANUTENCAO possui um campo chamado CODITEM, onde logicamente é colocado o CODIGO dos ITENS que se encontram OU na tabela ITEM OU na tabela ITEMANTIGO.

Exemplo:

--------------------------------------

CODITEM - DEFEITO

10 - Teste1

15 - Teste2

10001 - Teste3

20001 - Teste4

--------------------------------------

Então o unico meio que encontrei de fazer um relatorio disso, por exemplo, foi:

 

select ITEM.NOMEITEM, MANUTENCAO.DATAMANUT from ITEM
left join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEM.CODITEM)
UNION
select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT from ITEMANTIGO
left join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEMANTIGO.CODITEMANTIGO)

Fazendo 2 selects e juntando-os pelo UNION.

Porem como existem varias outras colunas na Query e que a tabela ITEM possui cerca de 100 mil registros, e a ITEMANTIGO cerca de 50 mil, a pesquisa esta sendo bem lenta já nesse computador. O outros são inferiores, o que causaria ainda mais demora.

A duvida agora é: existe algum outro meio mais rapido de fazer essa consulta?

 

Nao sei se ficou facil de entender, mas qualquer coisa, me deêm um toque.

 

Obrigado desde já a todos.

 

 

Até mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite LHR.

 

Tente assim:

 

select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT, ITEM.NOMEITEM
	   from ITEMANTIGO left join (ITEM left join MANUTENCAO on ITEM.CODITEM = MANUTENCAO.CODITEMMANUT)
	   on ITEMANTIGO.CODITEMANTIGO = MANUTENCAO.CODITEMMANUT

 

Um abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite LHR.

 

Tente assim:

 

CODE

select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT, ITEM.NOMEITEM

from ITEMANTIGO left join (ITEM left join MANUTENCAO on ITEM.CODITEM = MANUTENCAO.CODITEMMANUT)

on ITEMANTIGO.CODITEMANTIGO = MANUTENCAO.CODITEMMANUT

 

 

 

Um abraço.

Olá Discorpio,

 

Nesse método, ele está me exibindo uma consulta com TODOS os valores da tabela ITEM.

Eu preciso na verdade que ele me exiba os valores da tabela MANUTENCAO, substituindo com o "join" o campo MANUTENCAO.CODITEMMANUT, pelo ITEM.NOMEITEM e/ou ITEMANTIGO.NOMEITEMANTIGO.

Estou tentando alterar sua query pra ver se consigo chegar à isso.

 

Obrigado pela ajuda até agora.

 

Até mais!

 

--------------------------------------------------------------------------------------------

 

Tentando aqui, eu fiz a seguinte consulta:

 

select ITEM.nomedeitem as NOME, ITEMANTIGO.nomeitemantigo as NOME, MANUTENCAO.DATAMANUT from ITEM
right join (MANUTENCAO left join ITEMANTIGO on (ITEMANTIGO.coditemantigo = MANUTENCAO.coditemmanut))
on (ITEM.coditem = MANUTENCAO.coditemmanut)

E está quase perfeita!

O unico problema é que existe 2 campos NOME (NOMEITEM, NOMEITEMANTIGO) e eu preciso que fosse apenas 1, como na outra SQL com UNION faz.

Então tentei usar o "as NOME", porem a consulta retona tambem 2 colunas diferentes (NOME, NOME1).

Teria algum jeito de unir essas 2 colunas?

 

Abraço e até mais!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui!

E vergonhosamente, era um erro RIDICULO.

Tanto trabalho, por nada.

Estou usando a consulta com UNION mesmo, com a única diferença de que troquei o LEFT JOIN pelo JOIN.

Ficando assim:

 

select ITEM.NOMEITEM, MANUTENCAO.DATAMANUT from ITEM
join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEM.CODITEM)
UNION
select ITEMANTIGO.NOMEITEMANTIGO, MANUTENCAO.DATAMANUT from ITEMANTIGO
join MANUTENCAO on (MANUTENCAO.CODITEMMANUT=ITEMANTIGO.CODITEMANTIGO)

Agora está normalmente rápido.

Obrigado pela ajuda.

E malz pelo erro bobo.

 

Até mais!

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.