[firebase-br] Fwd: Select com NOT IN

Sandro Souza escovadordebits em gmail.com
Qui Jul 23 09:41:53 -03 2009


Bom dia/tarde Reinaldo.

Grande Reinaldo, o que foi dito sobre o NOT IN também vale para o IN, até
porque o mecanismo interno é o mesmo, só invertendo o resultado final, então
tem exatamente a mesma performance.

Espero ter ajudado mais que atrapalhado. :D

2009/7/23 Reinaldo Cesar <diasmartins em gmail.com>

> Vocês sabem se no IN também pode dar problemas de performance? ou somente
> no NOT IN.
>
> Li algo que a partir do Firebird 2.0, o otimizador não utiliza indices
> quando a instrução tem IN ou NOT IN na instrução SQL.
>
> Se for esse o Caso a troca por "OR" nos casos de campos como IN ('AB',
> 'BX', 'CA') e troca por exists no caso como citado abaixo é o recomendado?
>
> Att
>
> Reinaldo
>
> Magnun Oliveira escreveu:
>
>  apos alguns testes venho aqui mostrar o resultado. fiz as pesquisas com o
>> parametro cidade = 330
>>
>> o primeiro SQL foi com NOT IN
>>
>> select c.id_cidade, c.cidade
>> from cidades c
>> where c.id_cidade not in (
>> select id_cidade_destino from entregas where id_cidade_origem = :cidade
>> )
>>
>> resultado
>>
>> tempo = 42 minutos e 41 segundos
>> starting memory = 12.550.188
>> current memory = 13.995.740
>> delta memory = 1.445.552
>> number of buffers = 2048
>> reads = 41.369.325
>> writes = 702.440
>> rows affected = 1431
>>
>> o segundo SQL foi com NOT EXISTS
>>
>> SELECT id_cidade, cidade
>> FROM cidades c
>> WHERE NOT EXISTS (SELECT first 1 NULL
>> FROM entregas e
>> WHERE e.id_cidade_destino = c.id_cidade and e.id_cidade_origem = :cidade)
>>
>>
>> tempo = 13 segundos
>> starting memory = 12.265.992
>> current memory = 12.307.484
>> delta memory = 41.492
>> number of buffers = 2048
>> reads = 16.696.820
>> writes = 548.021
>> rows affected = 1431
>>
>>
>> obrigado a todos que ajudaram e ficam esses resultados para caso alguem
>> precise de uma coisa parecida, serve como comparacao.
>>
>>
>> ps: voltei o nome do campo id_cidade para id_cidade_destino na tabela
>> entregas, pois havia alterado para testes
>> ______________________________________________
>> 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
>



Mais detalhes sobre a lista de discussão lista