Existe algum método mais rápido do que o Locate?
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 :-)
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
Curtidas 0
Respostas
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.
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
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
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
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
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
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