Um exemplo, em pedidos pra filtrar os produtos do pedido:
Código: Selecionar todos
SEEK XPEDIDO
INDEX ON PEDIDO + PRODUTO WHILE PEDIDO=XPEDIDO TO TEMP
SET INDEX TO PRINCIPAL,TEMP
OrdSetFocus( "TEMP" )
BROWSE()
SET INDEX TO PRINCIPAL
fErase( "TEMP.NTX" )
Mesmo que o arquivo contenha milhões de registros, essa indexação é instantânea, e o browse também vai ser.
Lógico, dependendo do caso, SET SCOPE tem o mesmo efeito mas um SET FILTER, deixaria tudo extremamente lento.
Um browse de um arquivo com set filter vai ter navegação lenta.
Um browse de um arquivo com INDEX...FOR...WHILE vai ter navegação instantânea.
O tempo pra criar o índice, pode compensar ou não, dependendo do que vai ser filtrado.
Tem casos onde SET FILTER é melhor, em outros casos SET SCOPE é melhor, em outros casos um INDEX...WHILE é melhor, e em outros casos até um DBF temporário pode ser melhor.
Como tudo em programação, não existe "isto é melhor". Você é que precisa analisar qual vai ser a melhor opção para cada uma das suas necessidades.
Obs. Num banco de dados servidor, o servidor entrega tudo pronto ao terminal. É justamente nisto que o DBF perde longe.