Existe algum método mais rápido do que o Locate?

Delphi

12/01/2004

Olá amigos programadores.

Eu uso o Interbase 6, e carrego uma tabela que fica aberta na memória na maior parte do tempo do uso do aplicativo. A tabela contém muitos registros, na ordem de milhares. Para pesquisar estes records, já carregados para a memória do PC, eu uso o Locate. Mas a sua performance deixa muito a desejar. Se o registro estiver no final da tabela, e está ainda não foi totalmente percorrida, vários segundos se passam para a pesquisa se realizar. Como se trata de um aplicativo PDV, não devia demorar tanto tempo assim, para o processo ser ágil.

Se alguém puder me informar de outro método, não nativo do Interbase, porque eu já procurei em seu Help, que possa me auxiliar, eu ficaria muito grato.

Agradeço desde já qualquer ajuda.

Michael Benford :-)


Michael

Michael

Curtidas 0

Respostas

Aroldo Zanela

Aroldo Zanela

12/01/2004

Colega,

Existe um índice criado para a chave pesquisada? Isto deve melhorar, mas acho que a melhor estratégia seria o uso de StoredProcedure ou uso de query para que o otimizador do banco possa selecionar o melhor plano de busca.


GOSTEI 0
Marconi

Marconi

12/01/2004

Use o findkey

Ele só trabalha com indexes.

Se o que voce procura não for o index principal, crie um index secundário.

if Table.findkey([chave])
then showMessage(´achou´)
else showMessage(´nã achou´);

Marconi


GOSTEI 0
Marconi

Marconi

12/01/2004

Como funcionam os localizadores de registro:

O Locate varre todo o arquivo procurando pela chave.

O Query também varre todo o arquivo separando o que combina com a chave (SQL neste caso).

O FindKey apenas consulta o arquivo index, fatiando sucessivamente o resultado em 50¬, determinado se o que procura esta na parte superior ou inferior da divisão, descartando o resto.

É muito mais rápido do que qualquer outro método.

Marconi


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

12/01/2004

O Locate varre todo o arquivo procurando pela chave. O Query também varre todo o arquivo separando o que combina com a chave (SQL neste caso).


Isso só é verdadeiro em aplicações com banco de dados desktop. No caso de SGBDRs o otimizador do banco seleciona o índice para tirar proveito e potencializar a pesquisa.

O FindKey apenas consulta o arquivo index, fatiando sucessivamente o resultado em 50¬, determinado se o que procura esta na parte superior ou inferior da divisão, descartando o resto. É muito mais rápido do que qualquer outro método. Marconi


Depende de qual mecanismo estiver utilizando para acessar o banco, pois o método FindKey está disponível somente para TTable (BDE) e não é recomendável para acesso a banco Cliente/Servidor como o Interbase. Mesmo com o uso de TTable da IBX (IBTable) não existe o método FindKey.


GOSTEI 0
POSTAR