[firebase-br] Interbase rápido x Firebird muito lento. Me ajudem com esse problema por favor.

Rodolpho da Silva nascimento em gko.com.br
Qui Maio 14 12:35:02 -03 2009


Magno,

O subselect não é executado em cada linha da tabela principal. Ambas as consultas são executadas momentâneamente e alocadas em memória. A "engine" do FB é que se encarrega de comparar as linhas existentes ou não entre ambas as consultas já em cache para produzir o resultado. Uma das facilidades do EXISTS é que ele apenas faz um teste lógico (V ou F) entre os resultados e não produz resultado do subselect. Como assim? Eu não posso utilizar colunas do subselect em meu select principal usando EXISTS. 


Espero ter ajudado.
Abraço!
Rodolpho
  ----- Original Message ----- 
  From: Magno System 
  To: FireBase 
  Sent: Thursday, May 14, 2009 12:19 PM
  Subject: Re: [firebase-br]Interbase rápido x Firebird muito lento. Me ajudem com esse problema por favor.


  Oi Douglas, agora você me fez ficar com dúvida. Se o EXISTS executa 1 select 
  para cada registro da tabela principal, no teste do email anterior, seriam 
  28052 SELECT'S do EXISTS contra 1 do IN. Então como se explica o EXISTS ser 
  mais rápido ??? Não é ao contrário não ???


  ----- Original Message ----- 
  From: "Douglas Tosi" <douglasht em gmail.com>
  To: "FireBase" <lista em firebase.com.br>
  Sent: Thursday, May 14, 2009 11:26 AM
  Subject: Re: [firebase-br]Interbase rápido x Firebird muito lento. Me ajudem 
  com esse problema por favor.


  2009/5/14 Magno System <magno em speet.com.br>:
  > Na minha opinião, a regra é simples:
  > [NOT] IN (Valor1, Valor2, ... , ValorN)
  > [NOT] EXISTS (SELECT CAMPO FROM TABELA)

  A exceção é quando o select interno é complexo e lento.
  O IN executa este select interno uma vez só e faz comparação natural.
  Já com exists o select interno tende a ser executado uma vez para cada
  registro de select pai.

  Ou seja, se o select interno for lento, mas retornar poucos registros,
  vale mais usar o IN.
  Isto tudo é claro só serve para se ter uma ideia de como iniciar. Vale
  testar os dois casos e medir a diferença.

  hth,
  -- 
  Douglas Tosi
  www.sinatica.com





Mais detalhes sobre a lista de discussão lista