Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Select trava PC


AndréSAP

Pergunta

Olá, fiz esse select, mas algo faz com que ele trave e não execute, além de retornar a página inicial do cliente MySQL.

select l.titulo 
from livro l 
where l.codigo not in (select distinct e.livro 
from locacao o 
join exemplar e on o.exemplar = e.codigo 
join usuario u on o.usuario = u.codigo
where o.retirada 
between '2000-03-01' and '2000-08-31' and u.tipo = 3);

Alguém sabe me dizer porque acontece isso?

Agradeço as ajudas.

Editado por Denis Courcy
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'AndréSAP'

Normalmente isto ocorre porque o select não entendeu os indices existentes e entrou em TABLE SCAN.

Veja que cada l.codigo da tabela livro l deverá ser comparado a uma lista de resultado do select secundário que você criou, para saber se ele está ou não contido na lista.

Outro problema pode ser o filtro o.retirada between '2000-03-01' and '2000-08-31' and u.tipo = 3 que, por estar em duas tabelas, o motor do MySQL não conseguiu resolver.

Uma dica, verifique se os campos l.codigo, o.exemplar, e.codigo, o.usuario e u.codigo pertencem a índices em suas respectivas tabelas.

Join em 3 tabelas cada uma com 1000 registros, sem indice para as chaves dos joins, dará como resultado um table scan de 1000 x 1000 x 1000 = 1.000.000.000 registros pesquisados.

Link para o comentário
Compartilhar em outros sites

  • 0

Estou iniciando em MySQL, e quem fez esse SELECT na verdade foi um professor meu, eu só estou aqui porque ele não soube dizer o porque do erro.

Mas sinceramente, não entendi o que quis dizer, tirando a primeira parte

Veja que cada l.codigo da tabela livro l deverá ser comparado a uma lista de resultado do select secundário que você criou, para saber se ele está ou não contido na lista.

O resto pra mim foi a mesma coisa que grego... :wacko: hehe

Seria possível esse código rodar em outros SGBDs como o Oracle sem travar? Porque se for isso explica o fato do professor ter dado esta solução

Link para o comentário
Compartilhar em outros sites

  • 0

Uma correção. O MySQL não trava. Ele para para "pensar". A performance degradou de tal maneira que ele parece estar parado.

Estou iniciando em MySQL, e quem fez esse SELECT na verdade foi um professor meu, eu só estou aqui porque ele não soube dizer o porque do erro.
Informe a ele minha explicação acima.

O resto pra mim foi a mesma coisa que grego... :wacko: hehe
Peça a ele que te ensine sobre table scan, joins e indices.

Seria possível esse código rodar em outros SGBDs como o Oracle sem travar? Porque se for isso explica o fato do professor ter dado esta solução
Se quem criou as tabelas, em qualquer SGBD, não tomou os cuidados que falei no primeiro post, a perda de performance será a mesma.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...