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);
Comparar registro existente na tabela
- stcoutinho
- 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
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
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes