Como pesquisar rapidamente nos campos?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Como pesquisar rapidamente nos campos?

Mensagem 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
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como pesquisar rapidamente nos campos?

Mensagem 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.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
carlos_dornelas
Usuário Nível 3
Usuário Nível 3
Mensagens: 400
Registrado em: 25 Ago 2004 21:54

Como pesquisar rapidamente nos campos?

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