Página 1 de 1

Como pesquisar rapidamente nos campos?

Enviado: 09 Out 2011 16:41
por carlos_dornelas
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:

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
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

Como pesquisar rapidamente nos campos?

Enviado: 10 Out 2011 16:44
por Pablo César
Ja experimentou utilizar (6 vezes * nro_Registros) o comando COUNT TO ocorrencia for ... e aí você varrendo os 20 campos de cada registro. Eu acredito que a pesquisa pela memória, isto é através de vetores deve ser mais rápida, mas deve existir um limite de elementos o qual (na minha opinião) demandará algum recurso de gravação a disco quando este for um tamanho muito exagerado de registros. Os resultados do "ocorrencia" poderia ser adicionado a uma matriz.

Como pesquisar rapidamente nos campos?

Enviado: 10 Out 2011 21:13
por carlos_dornelas
Pablo, grato pela sugestão. Vou testar. Aproveitando, não sei se você tem experiência com SQL ou quem sabe algum colega que tem, poderia me dizer se as pesquisas nesses bancos SQL conseguem bater a velocidade de pesquisa dos DBFs?

Antonio Carlos