Otimizar consulta de SQL

Delphi

08/04/2008

Galera, tenho um dbgrid com todos os dados dos clientes cadastrados e um componente chamado JvDBSearchEdit que se encarrega de fazer a pesquisa quando o cliente quer procurar por um especifico.

O fato e que a tabela ja esta com 900 clientes cadastrados.

O meu cliente ligou reclamando que estava demorando mais de 4 minutos para procurar um nome.

Queria saber se alguem sabe como otimizar isso, chamando nesse caso so o que o usuario digitasse. Vi uma vez aqui no forum isso mas nao to acahndo. Me lembro que coloca algum -1 algo desse tipo.

Uso dbexpress com firebird 2.0


Jpauloss

Jpauloss

Curtidas 0

Respostas

Adriano_servitec

Adriano_servitec

08/04/2008

Olha, eu aqui não costumo carregar todos os clientes num dbgrid, acho isso desnecessário, pois não tem muita logica ficar com um dbgrid carregado com todos clientes sendo que a tela de um micro vc não vai enchergar todos (se tiver muitos clientes).

O que eu faço aqui no dbgrid é apenas mostrar quais os clientes ou algo que eu queira apareçer. Por exemplo usando um like posso buscar apenas parte de algum cliente ou clientes não carregando muito o dbgrid.

Bom eu aqui costumo trabalhar com o cds fechados e abrir somente quando é necessário, ou seja numa consulta por exemplo. Supondo que eu use assim um query de consulta

select ID, cliente from tabcliente 
where cliente like :pcliente
order by cliente


e no aplicativo chamar o cds assim
cds.close;
cds.params[0].asString := edtlocalizar.text+´¬´;
cds.open;


Bom como eu disse trabalho com cds fechado e abro apenas quando faço pesquisa, depois disso fecho o cds novamente.

Mais vamos ver o que o pessoal fala ai, pelo menos eu não tenho problemas com tempo longo em uma consulta, outra coisa tambem que eu tenho aqui na tabela firebird uso indices tambem.

É isso ai amigo


GOSTEI 0
Paulo

Paulo

08/04/2008

jpauloss, 900 registro não é nada. Se está demorando, pode ser alguma outra coisa, como o seu componente da Jedi que estás usando, ou mesmo o seu Select, mas acredito que a demora tem a ver com seu componente ou algo no cliente fora deste escopo. Seria bom você dar uma olhada melhor. Tenho aqui na empresa, tabelas com mais 1.000.000 de registro e funciona bem, claro, que deve-se considerar um tempo aí, mas numa consulta específica, não leva 4 minutos. Sua tabela é indexada? Se não, isso deve ser levado em conta, indexar os índices.


GOSTEI 0
Jpauloss

Jpauloss

08/04/2008

Olha, eu aqui não costumo carregar todos os clientes num dbgrid, acho isso desnecessário, pois não tem muita logica ficar com um dbgrid carregado com todos clientes sendo que a tela de um micro vc não vai enchergar todos (se tiver muitos clientes). O que eu faço aqui no dbgrid é apenas mostrar quais os clientes ou algo que eu queira apareçer. Por exemplo usando um like posso buscar apenas parte de algum cliente ou clientes não carregando muito o dbgrid. Bom eu aqui costumo trabalhar com o cds fechados e abrir somente quando é necessário, ou seja numa consulta por exemplo. Supondo que eu use assim um query de consulta
select ID, cliente from tabcliente 
where cliente like :pcliente
order by cliente
e no aplicativo chamar o cds assim
cds.close;
cds.params[0].asString := edtlocalizar.text+´¬´;
cds.open;
Bom como eu disse trabalho com cds fechado e abro apenas quando faço pesquisa, depois disso fecho o cds novamente. Mais vamos ver o que o pessoal fala ai, pelo menos eu não tenho problemas com tempo longo em uma consulta, outra coisa tambem que eu tenho aqui na tabela firebird uso indices tambem. É isso ai amigo


Valeu Adriano!

Perfomance melhorou 300¬


GOSTEI 0
POSTAR