[firebase-br] NOT EXISTS

Gladiston Santana gladiston em vidy.com.br
Ter Jul 22 17:26:09 -03 2014


Para um not atingir um alvo todos os elementos terão de ser resgatados,
para um exist, o primeiro elemento encontrado é o suficiente para alvo
estar completo.
Não importa o plano escolhido, na mesma perspectiva a negação sempre será
pior, seja na hora do resgate ou na pré-compilação onde determinará o plano.
Estou admirado em você não se lembrar disso.
Não usei 'select first 1', usei 'select 1' porque simplesmente não preciso
de nenhum campo, estou apenas testando a existência - em alguns RDBMS isso
economiza bytes ao parser, provavelmente no FB também.

Um cordial abraço,


Em 22 de julho de 2014 17:06, Carlos H. Cantu <listas em warmboot.com.br>
escreveu:

> 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



Mais detalhes sobre a lista de discussão lista