Aprenda PL/SQL

Comparar registro existente na tabela

Tuning de Banco, Tuning de SQL, Ferramentas de tuning
  

Mensagemem Ter, 29 Ago 2017 9:13 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);
cleberz

Mensagemem Seg, 04 Set 2017 11:39 am

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
stcoutinho
Localização: Sao Paulo - SP



Voltar para DBA Tuning

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante