[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