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

Magno System magno em speet.com.br
Qui Maio 14 10:38:38 -03 2009


Na minha opinião, a regra é simples:

[NOT] IN (Valor1, Valor2, ... , ValorN)

[NOT] EXISTS (SELECT CAMPO FROM TABELA)

Óbvio em que pode haver casos que sejam excessão, mas aí, é outro caso.


----- Original Message ----- 
From: "Sandro Souza" <escovadordebits em gmail.com>
To: "FireBase" <lista em firebase.com.br>; "Rodolpho da Silva" 
<nascimento em gko.com.br>
Sent: Thursday, May 14, 2009 10:15 AM
Subject: Re: [firebase-br]Interbase rápido x Firebird muito lento. Me ajudem 
com esse problema por favor.


Bom dia/tarde Rodolpho.

Grande Rodolpho, entendo perfeitamente o seu ponto de vista, mas não se
esqueça que nem sempre trata-se de um pequeno conjunto de elementos a serem
pesquisados.

Já imaginou uma situação em que você tenha uma tabela com milhares de
produtos, uma outra com alguns produtos ligados à primeira (chave
estrangeira) e você deseja saber que produtos da primeira tabela ainda não
constam na segunda?

Tudo isso depende apenas de como foram implementados os operadores naquele
SGBD. Se no caso dos operadores IN e NOT IN do Firebird (e outros), não são
utilizados os possíveis índices, então podemos resumir tudo ao seguinte:

1 - É um pequeno conjunto de valores? E de preferência constantes? Use o IN
ou NOT IN.

2 - É ou pode ser um grande conjunto de valores? E de preferência variáveis?
Use o EXISTS ou NOT EXISTS.

Depende apenas de entender como funciona cada um desses operadores para
saber em que situações podemos utilizá-lo.

Nesse exemplo fictício acima, dos milhares de produtos, conhecendo esse
cenário, com certeza utilizaremos o operador NOT EXISTS.

Também é minha modesta opinião.

Mais uma vez agradeço os comentários e as críticas dos participantes, que só
tem contribuido para o crescimento do fórum.

2009/5/14 Rodolpho da Silva <nascimento em gko.com.br>

> Sinceridade Sandro?
>
> Concordo com os engenheiros do FB em descartar o uso de índices para
> consultas do tipo CAMPO NOT IN (SELECT....). A cláusula IN é utilizada em
> expressões cujo a finalidade é passar um pequeno conjunto de valores. 
> Tanto
> é que na maioria dos SGDB's (eu ainda não fiz este teste no FB, mas creio
> que seja assim tmb) o limite do conjunto de valores usado em IN é 1.000.
> Como as consultas NOT IN (SELECT....) tem finalidade apenas de verificar a
> existência de dados entre um consulta externa (CAMPO NOT IN) com a 
> consulta
> interna ((SELECT...)) o uso de EXISTS é fundamental para correlacionar 
> este
> tipo de informação. É por isso que a maioria dos SGBD's (inclusive o FB)
> priorizam este tipo de consulta, utilizando os índices no seu plano de
> execução, uma vez em que o uso de EXISTS não precisa exportar dados da
> consulta interna para a consulta externa, apenas retornar VERDADEIRO ou
> FALSO ....
>
> É apenas a minha opnião....;-)
>
> Abraços!
> Rodolpho
>
>
>
> ----- Original Message -----
>  From: Sandro Souza
>  To: Carlos H. Cantu ; FireBase
>  Sent: Thursday, May 14, 2009 9:18 AM
>  Subject: Re: [firebase-br]Interbase rápido x Firebird muito lento. Me
> ajudem com esse problema por favor.
>
>
>  Bom dia/tarde Carlos.
>
>  Grande Carlos, muito obrigado por nos esclarecer sobre esse ponto
>  importante.
>
>  Tenho a esperança que um dia o Firebird possa utilizar um mecanismo mais
>  eficiente nesses tipo de pesquisa (NOT IN (<SELECT>)).
>
>  Mais uma vez muito obrigado pelos esclarecimentos.
>
>  2009/5/14 Carlos H. Cantu <listas em warmboot.com.br>
>
>  > EdB> Aproveitando a oportunidade, achei muito interessante o que
>  > EdB> disse nosso amigo Carlos H. Cantu sobre o operador NOT IN não
>  > EdB> mais utilizar índices nessas últimas versões do Firebird para não
>  > EdB> trazer resultados inconsistentes.
>  >
>  > Sendo mais preciso, o NOT IN não usará índices somente se a
>  > construção for do tipo ... NOT IN (<select>)
>  >
>  > EdB> Grande Carlos, você poderia dar um exemplo de como o NOT IN
>  > EdB> poderia gerar resultados inconsistentes se ainda utilizasse os
>  > EdB> índices? Fiquei muito curioso a respeito desse ponto.
>  >
>  > Retirado do release notes do FB 2.0:
>  >
>  > Existence Predicates NOT IN and ALL May Be Slow
>  > Firebird and, before that, InterBase, have produced incorrect results
> for
>  > the logical existence predicates ALL
>  > and NOT IN for many years. That problem has bee corrected in Firebird
> 2.0,
>  > but the change means that
>  > indexes on the inner tables cannot be used and performance may be slow
>  > compared to the same query's
>  > performance in V.1.5.
>  >
>  >
>  > []s
>  > Carlos H. Cantu
>  > www.FireBase.com.br - www.firebirdnews.org
>  > www.warmboot.com.br - blog.firebase.com.br
>  >
>  >
>  >
>  > ______________________________________________
>  > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>  > Para saber como gerenciar/excluir seu cadastro na lista, use:
>  > http://www.firebase.com.br/fb/artigo.php?id=1107
>  > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>  >
>  ______________________________________________
>  FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>  Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
>  Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
>
> ------------------------------------------------------------------------------
>
>
>
>  No virus found in this incoming message.
>  Checked by AVG - www.avg.com
>  Version: 8.5.325 / Virus Database: 270.12.29/2114 - Release Date: 
> 05/14/09
> 06:28:00
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


--------------------------------------------------------------------------------



No virus found in this incoming message.
Checked by AVG - www.avg.com
Version: 8.0.238 / Virus Database: 270.12.27/2112 - Release Date: 05/13/09 
07:04:00





Mais detalhes sobre a lista de discussão lista