| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
rogerioclaro2 Experiente

Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Ter Jul 24, 2018 11:12 am Assunto: Select Not Exists muito lento[RESOLVIDO] |
|
|
Pessoal, bom dia!
Estou precisando fazer um select para verificar os registros de uma tabela que não estão em outras, no caso referencia de produto, sei que são 12071 registros que estão na tabela produtosl4 e nao estão na tabela produtosl1 e nem na produtosl3
Fiz assim
| Código: |
SELECT * FROM produtol4 pr4
inner join produtol3 pr3 on pr3.referencia = pr4.referencia
WHERE NOT EXISTS (SELECT * FROM produtol1 pr1 WHERE pr1.referencia = pr4.referencia) |
Porém esta muito, mas muito lento... demorando cerca de 6 horas para rodar, a estrutura das tabelas são as mesmas.
Tentei pegar somente um referencia que sei que só tem na produtol4 mas ele demora quase 15 min para trazer o resultado.
Alguém tem alguma ideia pra agilizar o processo? Uso Firebird
Desde já muito obrigado.
Editado pela última vez por rogerioclaro2 em Qui Jul 26, 2018 1:35 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jul 24, 2018 11:31 am Assunto: |
|
|
Bom dia,
Existe um índice nessas 3 tabelas com o campo Referencia?
Acho que se existir esse índice deveria executar rapidamente.
Editado pela última vez por imex em Ter Fev 27, 2024 11:55 am, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
rogerioclaro2 Experiente

Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Ter Jul 24, 2018 1:03 pm Assunto: |
|
|
| imex escreveu: | Bom dia,
Existe um índice nessas 3 tabelas com o campo Referencia?
Acho que se existir esse índice deveria executar rapidamente.
|
não tem imex, so pk, porém e diferente, iguais so o campo referencia |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Jul 24, 2018 4:22 pm Assunto: |
|
|
Não entendi muito bem... o campo Referencia é a PK das tabelas?
Se não é então acredito que você vai ter que criar índices nessas tabelas com o campo Referencia para melhorar o desempenho dessa consulta. |
|
| Voltar ao Topo |
|
 |
rogerioclaro2 Experiente

Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Qua Jul 25, 2018 2:04 pm Assunto: |
|
|
| imex escreveu: | Não entendi muito bem... o campo Referencia é a PK das tabelas?
Se não é então acredito que você vai ter que criar índices nessas tabelas com o campo Referencia para melhorar o desempenho dessa consulta. |
certo IMEX, vou criar e posto os resultados, obrigado |
|
| Voltar ao Topo |
|
 |
rogerioclaro2 Experiente

Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Qui Jul 26, 2018 9:00 am Assunto: |
|
|
Pessoal, bom dia , fiz os índices conforme nosso amigo imex deu ideia, e deu ceto, ficou rápido.
Porém me deparei com um outra situação, tentei not exists e o not in,
| Código: |
SELECT * FROM produtol4 pr4
WHERE pr4.referencia not in --NOT EXISTS
(SELECT pr1.referencia FROM produtol1 pr1
inner join
produtol3 pr3
on
pr1.referencia <> pr3.referencia
WHERE pr1.referencia = pr4.referencia)
|
Preciso de pegar os produtos que estão na l4 que nao estão na l3 e também não estão na l1 rsss depois fazer isso com a l3, fiz da forma acima mas ele traz algumas certas e outras erradas(que estão presentes na l3 e l1) alguém pode dar um help? |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Jul 26, 2018 10:09 am Assunto: |
|
|
Bom dia,
Acho que nesse caso você pode utilizar dois not exists:
| Código: | SELECT * FROM produtol4 pr4
WHERE
NOT EXISTS
(SELECT pr1.referencia FROM produtol1 pr1
WHERE pr1.referencia = pr4.referencia) AND
NOT EXISTS
(SELECT pr3.referencia FROM produtol3 pr3
WHERE pr3.referencia = pr4.referencia) |
Espero que ajude |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Jul 26, 2018 10:21 am Assunto: |
|
|
ja tentou com having?
| Código: | SELECT pr4.referencia AS ref4,
pr3.referencia AS ref3,
pr1.referencia AS re1
FROM produtol4 pr4
LEFT JOIN produtol3 pr3 ON pr3.referencia = pr4.referencia
LEFT JOIN produtol1 pr1 ON pr1.referencia = pr4.referencia
HAVING ref3 IS NULL OR ref1 IS NULL |
_________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
rogerioclaro2 Experiente

Registrado: Quinta-Feira, 17 de Outubro de 2013 Mensagens: 404
|
Enviada: Qui Jul 26, 2018 1:30 pm Assunto: |
|
|
| Valeu imex e joemil, fiz alguns ajustes e deu certo, muito obrigado |
|
| Voltar ao Topo |
|
 |
joemil Moderador

Registrado: Quinta-Feira, 25 de Março de 2004 Mensagens: 9100 Localização: Sinop-MT
|
Enviada: Qui Jul 26, 2018 3:14 pm Assunto: |
|
|
qual deles deu certo? _________________ <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
Enviar imagens: http://tinypic.com/ |
|
| Voltar ao Topo |
|
 |
|