Ir para conteúdo

Arquivado

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

Eduardo Matsuzaki

Select lento

Recommended Posts

Bom dia galera... meu problema eh o seguinte.

 

montei um script de um catalogo de preços, só que no meu teste eu tinha apenas 400 itens, agora são 5000 e ta muito lento, será que da pra melhorar?

 

minhas tabelas estão estruturadas da seguinte forma:

 

tabela> descitempreco

colunas> descid / descP / descE / descI

 

tabela> itempreco

colunas> itemid / itemcod / itemprecoint / itemprecoext / itmeimposto / itemdataatualizacao / itemobsoleto / itemnatureza

 

tabela>perusuariopreco

colunas> perid / pernivel / pernatureza / perdesconto

 

tabela> usuariopreco

colunas> usuarioid / perid / usuarionome / usuariologin / usuariosenha / usuarioidioma / usuariostatus / usuarioadmin

 

 

meus selects estão da seguinte forma:

 

SELECT i.ItemCod, d.ItemCod FROM itempreco i INNER JOIN descitempreco d ON i.ItemCod = d.ItemCod WHERE AND descP LIKE '%%' OR i.ItemCod = ''

SELECT i.ItemCod, i.ItemObsoleto, d.DescP, i.ItemPrecoInt, i.ItemPrecoExt, i.ItemNatureza, p.PerId, p.PerNatureza, p.PerNivel, p.PerDesconto, u.* FROM itempreco i INNER JOIN descitempreco d INNER JOIN perusuariopreco p INNER JOIN usuariopreco u ON d.ItemCod = i.ItemCod AND i.ItemNatureza = p.PerNatureza AND u.perid = p.PerId AND usuarioid = '382' WHERE descP LIKE '%%' OR i.ItemCod = '' LIMIT 0, 15

será que left outer join deixa mais rapido dependendo de alguma coisa? sei lá, não entendo muito disso.

 

espqro que me ajudem

 

[]'s

 

Eduardo Matsuzaki

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro tira todos os INNER JOIN e troca por where campoA=campoB e depois poem index no descP pq o q deve ta lerdando a consulta eh ele, LIKE eh uma funçao que litermante DEVORA a força do banco

 

alem disso todos os pontos de junçao nas tabelas devem ser PRIMARY KEY(se possivel) ou index

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vlw giesta..

 

 

soh mais duas perguntinhas....

 

1ª - o que eh campo index??? não entendo muito de MYSQl ainda... como eu crio um?

2ª - Como assim tirar o inner join? como eu relaciono as tabelas???

 

mas o select tem que ter o LIKE porque eh um sistema de buscar encadeada, meio complexo, vou mudar o resto que você falou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Giesta, arrumei ele!

 

agora ficou mais rápido que o D Flash!

hehehe

 

mas ainda falta você me explicar o que campo index!!!!!

 

eu juntei duas tabelas a de descrição e a de preço em uma só, percebi que não tem necessidade de ter duas.!

e também defini as primary keys que você falou.

 

muito bom!

 

obrigado

 

[]'s

Eduardo Matsuzaki

Compartilhar este post


Link para o post
Compartilhar em outros sites

INDEX nao eh um campo eh uma caracteristica do campo.... mas com que a tabela se mantenha ordenada naquela ordem, explicando grosseiramente seria um PRIMARY KEY que nao eh unico na tabela, e sendo assim ainda pode realizar busca binaria(aquela q vai dividindo a tabela ao meio a cada leitura de linha)

 

e pra juntar SEM INNER JOIN

 

exemplo:

 

select tabA.campoA , tabB.campoB

from

tabA INNER JOIN tabB ON tabA.campoC = tabB.campoC

 

 

VIRA

 

select tabA.campoA , tabB.campoB

from tabA,tabB

where

tabA.campoC = tabB.campoC

 

 

(eh estranho você nao saber isso pq a maioria das pessoas sabe usar o where mas nao sabe usar join)

 

 

 

 

 

 

Eu nao posso provar que where eh melhor q inner join, mas na exeperiencia o where funfa melhor, pq o

 

INNER JOIN junta tudo, mesmo o q nao precisa

 

O where soh junta o q ele precisar, no caso por exemplo de você soh querer o lote 1 a 10 ele nao vai juntar do lote 1 a 5000 antes de aplicar os filtros

 

(eu acho rs)

Compartilhar este post


Link para o post
Compartilhar em outros sites

heehhehe

 

eu montei uma apostila de MYSQL esse fim de semana pro lugar onde trabalho, consegui aprender agora...

 

eh isso mesmo giesta

 

consegui...

 

eu defini meus campos como primary key, mantive o select, só juntei duas tabelas numa só que não presisavam estar separadas... deu certo

 

vlwwww

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.