Passei dois dias tentando otimizar algumas rotinas de busca que já usavam Ãndice temporários com a clausula FOR. Uso estes Ãndices para filtragem de palavras em um determinado campo, como exemplo, o endereço de um cliente.
Tanto uso em rede wifi como cabeada causa um grande intervalo (demora) na entrega dos resultados, sendo a cabeada um pouco menos lenta.
Tentei OrdWildSeek() e permaneceu insatisfatório, além de ter que capturar o resultado para um array. Em muitas telas, a busca já é feita de dentro de um DbEdit e o fato de montar um array no fim não atendeu muito bem.
O jeito foi criar um servidor de filtragem para DBF, capaz de processar e devolver aos PCs de rede o ponteiro do indice pronto evitando assim todo tráfego de rede durante sua criação. Não é que deu certo! É um motor como qualquer outro que se instala no servidor como quando usamos SQL, MYSQL, ODBC, etc com finalidade exclusiva de filtragem de dados.
O fato é que uma simples filtragem por endereço demora em média de 3 a 4 minutos em uma rede wifi e com o servidor de filtragem caiu para menos de 3 segundos, ou seja, instantâneo.
O servidor de filtragem aceita criação de Ãndice comum, com WHILE e com FOR ou com ambos e tira proveito dos Ãndices já construÃdos pela aplicação a qual esta servindo. A vantagem no momento é que não precisei alterar para outro tipo de banco, mudar fontes etc, apenas alterei no momento que preciso criar o Ãndice temporário que é algumas telas apenas.
Fiquei empolgado com isto, estou terminando as adaptações e vou colocar em campo no cliente com umas 20 máquinas, que usam muito este recurso de busca por palavras no campo endereço e ver como se sai.