[firebase-br] NOT EXISTS

Carlos H. Cantu listas em warmboot.com.br
Ter Jul 22 17:06:50 -03 2014


GS> Em teste de performance não há dúvidas que exist é melhor que not exist

Uh?

A performance do "exists" ou do "not exists" dependerá do plano
escolhido. O simples fato de usar o "not" junto com o "exists' não
quer dizer que ficará mais lento. Se ambos gerarem o mesmo PLAN
(usando índices), grandes chances que não haja diferença de
performance. Se fizer um scan natural, aí não tem como prever o
resultado, nem com, nem sem o NOT.

PS: O uso do "select first 1" dentro do exists, até onde lembro, é
desnecessário, visto que o exists interromperá o fetch tão logo o
"primeiro registro" seja encontrado.

PS/2: Não "confunda" NOT EXISTS com NOT IN (select ...), pois NOT IN não permite o
uso de índices pelo otimizador.

[]s
Carlos H. Cantu
www.FireBase.com.br - www.firebirdnews.org
www.warmboot.com.br - blog.firebase.com.br

GS> Em teste de performance não há dúvidas que exist é melhor que not exist, ex:
GS> select * from vendas a
GS> where exist(select 1 from clientes b where b.id_cliente=a.id_cliente)

GS> Se voce puder adaptar suas queries para nunca usar o NOT, seria ótimo
GS> porque a negação é mais custosa para o banco de dados: NOT EXIST, NOT IN,...
GS> A maioria das vezes innner/left join, exists e GTT são suficientes para
GS> evitar um NOT.


GS> Em 22 de julho de 2014 15:38, Ricardo Rodrigues <ricardopd em gmail.com>
GS> escreveu:

>> Boa tarde Galera, estou com uma dúvida
>> verifique se vocês pode me ajudar
>>
>>
>> Verificar os itens que foram vendidos no mes 06
>>
>> select cod_produto
>> from item
>> where data between '06/01/2014' and '06/30/2014'
>>
>> Verificar os itens que "não" foram vendidos no mes 06
>>
>> select cod_produto
>> from item
>> where not data between '06/01/2014' and '06/30/2014'
>>
>>
>> Como eu faria essas duas consultas itulizando exists e not exists, queria
>> fazer um teste de performance.
>>
>> Grato





Mais detalhes sobre a lista de discussão lista