Como pesquisar rapidamente nos campos?
Enviado: 09 Out 2011 16:41
Amigos, boa tarde.
Tenho uma rotina que está funcionando bem, mas gostaria de de opiniões dos colegas mais experientes se não há outra forma de aumentar a performance da minha rotina. Veja um exemplo de como faço atualmente:
Contexto:
a) Um DBF com 20 campos x1, x2... até x20, todos numéricos com 2 posições, sendo que os valores de cada campo não se repetem. Esse DBF possui 100 mil registros;
b) Um outro DBF com 6 campos y1, y2... y6, também sendo todos numéricos com 2 posições, com valores que não se repetem contendo 1 milhão de registros;
c) Preciso procurar cada registro de B em A, e foi aí que criei a seguinte rotina:
Então, resumindo, o que eu gostaria é de aprimorar a forma de pesquisa nos campos de cada registro, para quem sabe aumentar a velocidade.
Antonio Carlos
Tenho uma rotina que está funcionando bem, mas gostaria de de opiniões dos colegas mais experientes se não há outra forma de aumentar a performance da minha rotina. Veja um exemplo de como faço atualmente:
Contexto:
a) Um DBF com 20 campos x1, x2... até x20, todos numéricos com 2 posições, sendo que os valores de cada campo não se repetem. Esse DBF possui 100 mil registros;
b) Um outro DBF com 6 campos y1, y2... y6, também sendo todos numéricos com 2 posições, com valores que não se repetem contendo 1 milhão de registros;
c) Preciso procurar cada registro de B em A, e foi aí que criei a seguinte rotina:
Código: Selecionar todos
Sele 1
use DBF (a)
Sele 2
use DBF (B)
go top
do while .not. eof()
aM1:={}
for g=1 to 6
h="y"+alltrim(str(g))
aadd(aM1,&h)
next
sele 1
go top
do while .not. eof()
aM2:={}
for g=1 to 20
h="x"+alltrim(str(g))
aadd(aM2,&h)
next
ocorencia=0
for g=1 to 6
if ascan(aM2,aM1[g])>0
ocorrencia+=1
endif
next
if ocorrencia=6
sele 1
exit
endif
skip
enddo
skip
enddo
Antonio Carlos