Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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...
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
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)
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
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