Mesmo que na memória, essa criação de índice vai demorar demais.
Opção 1:
O que mencionei SET SCOPE TO nPedido
Pode até fazer GOTO TOP e GOTO BOTTOM que vai ficar limitado ao número do pedido, por isso rápido.
E por isso mencionei de lembrar de desativar o SET SCOPE no final, senão fica preso a esse intervalo
Opção 2:
Eu fazia isto há muitos anos atrás, com SIXCDX no Clipper e depois no Harbour, pode considerar como um sub-index.
Código: Selecionar todos
SEEK nPedido
INDEX ON qualquerchave TO TEMP WHILE nPedido == PEDIDO
Isso vai criar um índice somente com o que se refere a esse pedido, extremamente rápido, porque vai usar o DBF já indexado por pedido, e só usar o bloco que interessa.
Não sei se pode variar conforme a RDD usada, faça seu próprio teste.
Pode usar set index additive pra acrescentar esse índice na lista, e depois precisa remover da lista.
Lembrando: os outros índices precisarão ser atualizados em caso de alteração, então precisam ser mantidos abertos, além do temporário.
Nota:
Pra outras situações, há o SET SCOPE inicial e final, por exemplo, pra um intervalo de datas.
Nota 2:
INDEX FOR -> usa todos os registros pra fazer filtro, vai processar o arquivo inteiro
INDEX WHILE -> processa daquela posição em diante, enquanto a condição for válida