Página 1 de 1
Tem como fazer filtragem mais rápida?
Enviado: 05 Abr 2008 17:06
por labaroazul
Em meus programas costumo utilizar ìndices .CDX (isso deu muito mais velocidade para minhas filtragem, eu acho). Usando, por exemplo:
SELECT 13
SET ORDER TO 1
SET FILTER TO EMPRESA = cEMPRESA .AND. NUMERO = cNUMERO
eu consigo obter a lista de registro que atendem a essas especificações em cerca de um minuto, um minuto e meio. Gostaria de obter essa lista de registros em um tempo menor. Tem algum jeito de acelerar a filtragem?
:f
Enviado: 05 Abr 2008 17:26
por Maligno
A única forma de aumentar a velocidade do SET FILTER é diminuir o tamanho do banco de dados. E isso pode ser feito de duas formas: apagando registros (não é uma boa idéia) ou fazendo o sistema entender que existem menos registros que a realidade. Aí entra o SET SCOPE. Uso a biblioteca SIX e ela me dá esse recurso. Exemplo:
SET SCOPE TO cEmpresa
GO TOP
SET FILTER TO NUMER=cNUMERO
Estou considerando que a chave de índice é pela identificação da empresa. Assim, a velocidade da pesquisa aumentará consideravelmente. A não ser que o volume de registros dessa empresa seja muito alto.
Enviado: 05 Abr 2008 18:01
por ERASMO ANDRIOLI
AMIGO...
CREIO QUE A FORMA MAIS RAPIDA QUE POSSA EXISTIR É USAR O SEGUINTE CÓDIGO:
SELECT 13
INDEX ON EMPRESA TAG 1 TO EMPRESA=cEMPRESA .AND. NUMERO=cNUMERO
O index é muito mais rapido...
Saudações,
ERASMO ANDRIOLI
Enviado: 05 Abr 2008 19:53
por Maligno
Ah, sim. Criar um índice específico para isso é bem mais rápido (imagino que o OP já tivesse pensado nisso). Mas pra aproveitar um índice que já exista, e que tenha como chave a identificação da empresa, acho que o melhor caminho é o SET SCOPE.
Enviado: 07 Abr 2008 21:21
por rochinha
Amiguinho
E pelo visto voce deve estar pensando em colocar o seu sistema multiempresa.
Como eu uso CDX também concordo com os post anteriores salientando que com SET nenhum arquivo visivel é criado.
Minhas dica são:
Se voce planeja montar seu sistema multi-empresa e não quer sair alterando o esquema de chaves de indexação acrescentando o codigo da empresa ao mesmo, use SET SCOPE e depois use o SET FILTER, exemplo:
Voce possui tabelas indexadas por campos DATA e produz pesquisas por PERIODO, então use o SET SCOPE sobre o indice de data trazendo os registros do periodo e depois um SET FILTER para o codigo da empresa, que poderá ser uma variavel STATIC ou PUBLIC contendo o codigo desde a abertura do sistema.
Ou altere todas as chaves de indices acrescentando o campo que contem codigo da empresa(supondo que todas suas tabelas tenham este campo na estrutura) e altere também os locais onde voce filtra usando tambem o codigo da empresa.
Usei por muito tempo o SubNTX com NTX e quando passei para CDX, não entendia muito o seu funcionamento, que basicamente era o mesmo e desde então nunca mais usei outro método.