Comparar registro existente na tabela

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
Responder
cleberz
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 107
Registrado em: Ter, 15 Nov 2011 8:42 am

Bom dia, estou fazendo um script para comparar se existe registro em uma tabela e não existe na outra.
alguém sabe me dizer, se em termos de performance, qual é a melhor opção?

EXEMPLO 1
---------

select *
from A where CODCLI in
(SELECT COD FROM A
minus
SELECT distinct COD FROM B);



EXEMPLO 2
---------

SELECT *
FROM A a
WHERE NOT EXISTS (SELECT 1
FROM B b
WHERE a.COD = b.COD);
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Olá cleberz,

Se você quer ver o que falta em AMBAS as tabelas, pode aplicar um FULL OUTER JOIN

SELECT X.*, Y.*
FROM A X
FULL OUTER JOIN B Y
ON (X.CODCLI = Y.CODCLI)
WHERE X.CODCLI IS NULL OR Y.CODCLI IS NULL

Agora, entre as querie que me passou, a performance dependeria de uma série de fatores:

- Volumetria das tabelas;
- Existência de ìndices;
- Cardinalidade colunas;

Eu geralmente prefiro o EXISTS para avaliar se um determinado registro existe ou não em outra tabela, mas isso não significa que a performance sempre será melhor neste caso. É necessário testar as queries e ver a que melhor se adequa ao seu caso.

Abraços,

Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes