Re: [firebase-br] Parâmetros nulos

dvdmengarda em hotmail.com dvdmengarda em hotmail.com
Qui Jul 20 17:13:19 -03 2006


Fiz alguns testes com o uso das duas formas mencionadas (coalesce e 'or') e 
em ambas o plano escolhido foi o natural. Tentei forçar o plano com a chave 
primária, porém o mesmo foi recusado. Dependendo da quantidade de registros 
que se irá pesquisar ou retornar, o ganho que se tem na otimização da 
instrução SQL resulta na perda da performance.
Tenho uma tabela de duplicatas com cerca de 400.000 registros e quando 
executo uma query que retorne apenas alguns registros e é utilizada a ordem 
natural, a demora é significativa. Nos casos como o mencionado o ideal seria 
montar a query de acordo com o necessidade do filtro, ou seja, se um 
determinado campo não será filtrado porque seu parâmetro é nulo, melhor não 
incluí-lo da query. Dá um pouco mais de trabalho, mas vale a esforço.


> SELECT
>  [CAMPOS]
> FROM
>  [TABLEAS]
> WHERE
>  (:PARAM IS NULL
>    OR
>     CAMPO = :PARAM)
>

> SELECT
>  [CAMPOS]
> FROM
>  [TABLEAS]
> WHERE
>  CAMPO = COALESCE(:PARAM, CAMPO)
>

----- Original Message ----- 
From: "Fabiano Arndt" <fabianoallex em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Thursday, July 20, 2006 4:43 PM
Subject: Re: [firebase-br] Parâmetros nulos


Olá Kléber,

faz tempinho já que tentei fazer da mesma forma que no Oracle usando
os componetes IBQuery no Delphi e não funcionava direito muito bem
não, não lembro exatamente o que acontecia, aí criei esse segundo
parâmetro e ficou blz.

pra tirar a dúvida (e lembrar o que acontecia), assim que eu conseguir
vou fazer o teste novamente.

flw,
Fabiano.

Em 20/07/06, Kléber Caneva<kdcc em terra.com.br> escreveu:
> Não sei pq teve que criar esse segundo parametro..
>
> Veja nas mensagens de ontem, eu passei um exemplo onde usso exatamente 
> como
> no seu exemplo do Oracle.
>
> []´s
>
> Kléber Caneva
>
> ----- Original Message -----
> From: "Fabiano Arndt" <fabianoallex em gmail.com>
> To: "FireBase" <lista em firebase.com.br>
> Sent: Wednesday, July 19, 2006 5:57 PM
> Subject: Re: [firebase-br] Parâmetros nulos
>
>
> Precisei disso tbm, em Oracle é facinho, normalmente nossos select de
> relatórios e consultas tem esse formato no Oracle:
>
> SELECT
>  [CAMPOS]
> FROM
>  [TABLEAS]
> WHERE
>  (:PARAM IS NULL
>    OR
>     CAMPO = :PARAM)
>  AND
>  (:PARAM2 IS NULL
>    OR
>     CAMPO = :PARAM2)
>
>
> no firebird tive que criar 2 parametros para cada opção, ficou mais ou
> menos assim
>
> SELECT
>  [CAMPOS]
> FROM
>  [TABLEAS]
> WHERE
>  (:POR_PARAM = -1
>    OR
>     CAMPO = :PARAM)
>  AND
>  (:POR_PARAM_2 = -1
>    OR
>     CAMPO = :PARAM2)
>
> aí se o usuário deseja pelo primeiro parametro, passo 0 para POR_PARAM
> e o valor do parametro se ele deseja não filtrar pelo parametro, passo
> -1 para POR_PARAM
>
> espero que nao tenha ficado confusso
>
>
> flw,
> Fabiano.
>
>
> Em 18/07/06, "Fabrício F. Kammer"<ffkammer em conchalnet.com.br> escreveu:
> > Salve Galera!
> >
> > Alguém sabe alguma forma eficiente para testar se um parâmetro é nulo?
> > Tenho muitas consultas com parâmetros opcionais e preciso que o select
> > traga todos os registros caso o parâmetro não sejam informados.
> >
> > Em Oracle isso é o possível:
> >
> > WHERE CAMPO=:PARAM OR :PARAM IS NULL
> >
> > Já no FB não é possível esta solução. Testei o seguinte:
> >
> > WHERE CAMPO=:PARAM OR 0=:PARAM
> >
> > Porém dessa forma eu terei que passar um 0 (zero) na momento da execução
> > da consulta, caso isso seja esquecido a consulta não retornará nenhum
> > registro.
> >
> > []s
> >
> > --
> > Fabrício F. Kammer
> > Conchal/SP
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para editar sua configuração na lista, use o endereço
> > http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
> E-mail classificado pelo Identificador de Spam Inteligente Terra.
> Para alterar a categoria classificada, visite
> http://mail.terra.com.br/protected_email/imail/imail.cgi?+_u=kdcc&_l=1,1153342753.411977.18494.aldavila.hst.terra.com.br,5303,Des15,Des15
>
> Esta mensagem foi verificada pelo E-mail Protegido Terra.
> Scan engine: McAfee VirusScan / Atualizado em 19/07/2006 / Versão:
> 4.4.00/4810
> Proteja o seu e-mail Terra: http://mail.terra.com.br/
>
>
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço 
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa




Mais detalhes sobre a lista de discussão lista