[firebase-br] RES: Otimizar Where

Felix - Sol Informática felix em soltecnologia.com.br
Seg Dez 19 23:01:30 -03 2011


Campo no Delphi:

Informe Veículo: [ EdVeiculo : TEdit ] (Hint: Informe Placa ou Automovel ou
Proprietário)

Então, eu pesquiso no banco da seguinte maneira:
1. pela placa - que obviamente será única e individual - não existem 2
registros com a mesma placa;
2. pelo automóvel - poderão existir vários veículos com a descrição 'CIVIC';
3. pelo proprietário - um proprietário 'JOSE' poderá ter vários veículos
cadastrados.

Select (campos) 
  from veiculo 
  inner join proprietario on veiculo.codprop = proprietario.codprop
  where 
     veiculo.placa = :xveiculo or 
     veiculo.automovel containing :xveiculo or 
     proprietario.nome containing :xveiculo

parambyname('xveiculo').asstring := EdVeiculo.Text

Caso o sistema retorne 1 só registro (em qualquer das condições acima) eu já
apresento as informações pertinentes; caso contrário é mostrada uma janela
para seleção do registro correto.

A pesquisa é feita de forma rápida, não estou reclamando do tempo; mas deve
haver uma forma de acelerar o processo, fazendo o banco trabalhar o mínimo
possível.

Seria algo como:
Se achou a placa, não precisa pesquisar mais nada; retornar registro;
Se não achou a placa, pesquisar por automóvel - retornar o(s) registro(s)
encontrado(s);
Se não achou o automóvel, pesquisar por proprietário - retornar o(s)
registro(s) encontrado(s).

Se não é possível fazer via sentença SQL, como seria uma SP para isso?
Obrigado.

Fco. Felix
www.soltecnologia.com.br

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Alysson Gonçalves de Azevedo
Enviada em: segunda-feira, 19 de dezembro de 2011 21:28
Para: FireBase
Assunto: Re: [firebase-br] Otimizar Where

Se fazer questão de que essa "escolha" seja feita no DB e não no delfão,
usa Stored Procedure Seletável...


Alysson Gonçalves de Azevedo
(11) 8491-7730



Em 19 de dezembro de 2011 21:22, Hélio Oliveira
<hpensador em gmail.com>escreveu:

> Boa noite Felix!
>
>
>
>  Estou pensando em otimizar uma consulta, que inicialmente é do tipo:
>> Select * from veiculo where placa = :xplaca OR veiculo containing
>> :xveiculo
>>
>> Acontece que se ele achar 1 registro onde [placa = :xplaca], não será
>> necessário realizar o [OR veiculo containing] que é mais demorado.
>>
>> Não pretendo fazer 2 consultas separadas; alguma sugestão?
>>
>
> Não sei qual é sua realidade, porém eu uso em situações como esta o
> seguinte: na tela de pesquisa tenho além do campo onde será digitado a
> informação a ser pesquisada um combo onde o Cliente irá dizer em qual
campo
> quer fazer a pesquisa, daí a partir do que for selecionado eu monto a
minha
> SQL dinamicamente.
>
> --
> []'s,
>
> Hélio Oliveira
> Bel. Ciência da Computação
> Técnico em Contabilidade
> e-mail : hpensador em gmail.com
> Skype : hpensador
> http://hpensador.blogspot.com/
> (71) 9975-9176
>
>
>
> ______________________________**________________
> 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<http://www.firebase.com.b
r/fb/artigo.php?id=1107>
> Para consultar mensagens antigas:
http://firebase.com.br/**pesquisa<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