[firebase-br] Fwd: Select com NOT IN

glautter glauber glautterg em gmail.com
Sex Jul 24 00:28:08 -03 2009


o IN não tem problema de performance quando se trata de clausula where
comum,
no caso de utilizar uma Where column IN (SubQuery) já não eh viável, pois a
subquery será rodada para cada registro da query pai.
mas não tiver jeito deve ser utilizado sim.
de preferência utilizar subquerys na clausula from.



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