Página 1 de 2

Indices temporários, duvidas

Enviado: 02 Dez 2015 16:46
por asimoes
Pessoal,

Alguém saberia me dizer qual é a diferença entre TEMPORARY E MEMORY :

ex.: INDEX ON CHAVE TAG CHAVE MEMORY

ou INDEX ON CHAVE TAG CHAVE TEMPORARY

Indices temporários, duvidas

Enviado: 02 Dez 2015 19:05
por ANDRIL
Qual tipo de RDD esta usando? Eu usei o TEMPORARY com NTX e notei um ganho significante. Usei com CDX e não notei o mesmo ganho. Não sei se é aceita em qualquer RDD esta clausula.
Quando tentei usar o MEMORY deu erro.

Notei que ao usar o TEMPORARY, é criado um "resultado" a parte, ou seja, no DBF eu tinha 2 indices e abertos SET INDEX TO ind1,ind2 ao criar o temporario, nao consigo manter os 2 abertos, fica somente ele, o que ocasiona problema de atualização dos indices em caso de manipular o resultado fazendo alguma alteração nos dados e salvando.

Acho que fiz algo errado, mais foi esse resultado que obtive, tanto que desativei e voltei a usar o arquivo temporário físico, onde add ele no SET INDEX TO ind1, ind2, tmp1 para refletir as alterações em todos.
Ate+

Indices temporários, duvidas

Enviado: 02 Dez 2015 21:16
por asimoes
Andril,

No meu caso é CDX agora um temporário em memória é um CDX ?

Continuo querendo saber TEMPORARY X MEMORY qual a diferença?

Indices temporários, duvidas

Enviado: 02 Dez 2015 21:23
por asimoes
Compilando com -p para gerar o ppo

USE APM05 ALIAS APM05 NEW SHARED
INDEX ON ID_E_BCO TAG ID_E_BCO1 TEMPORARY
INDEX ON ID_E_BCO TAG ID_E_BCO2 MEMORY

PPO:
dbUseArea( .T.,, "APM05", "APM05", iif( .T. .OR. .F., ! .F., NIL ), .F. )
ordCondSet(,,,,,, RecNo(),,,,,,,,,,, .T.,, ) ; ordCreate(, "ID_E_BCO1", "ID_E_BCO", {|| ID_E_BCO}, ) // USANDO TEMPORARY
ordCondSet(,,,,,, RecNo(),,,,,,,,,,, .T.,, ) ; ordCreate(, "ID_E_BCO2", "ID_E_BCO", {|| ID_E_BCO}, ) // USANDO MEMORY

Alguma diferença?

Indices temporários, duvidas

Enviado: 02 Dez 2015 22:05
por ANDRIL
Não vejo nenhuma diferença no seu PPO. Vendo o help do xHarbour embora eu utilize no momento Harbour 3.2, no comando INDEX não tem a clausula MEMORY e sim TEMPORARY, creio que a MEMORY faça parte de algum .CH de algum RDD.
Esta usando algum .CH para CDX?

Indices temporários, duvidas

Enviado: 02 Dez 2015 22:08
por asimoes
Andril,

Esse teste eu fiz com harbour 3.4, tanto faz TEMPORARY OU MEMORY o PPO não mostra diferenças.

Indices temporários, duvidas

Enviado: 03 Dez 2015 13:47
por lugab
Boa tarde, povo.

Leigamente falando, existe alguma vantagem em usar a cláusula MEMORY ou deixar de usá-la ??

Ou seja, qual vantagem há em usar INDEX ON CHAVE TAG CHAVE MEMORY em vez de simplesmente INDEX ON CHAVE TAG CHAVE ???

Grato

Indices temporários, duvidas

Enviado: 03 Dez 2015 13:50
por asimoes
Lugab,

Se você não especificar TEMPORARY OU MEMORY vai ser criado o indice fisico CDX ou NTX

Indices temporários, duvidas

Enviado: 03 Dez 2015 18:12
por lugab
Valeu, Asimoes.

Pra mim "MEMORY" é novidade. Uma ótima novidade aliás, pq dispensa o acesso a disco rígido e acelera o processo

Obrigado

Indices temporários, duvidas

Enviado: 04 Dez 2015 20:34
por lugab
Boa noite a todos...

Surgiu uma dúvida:

Ao finalizar o programa é necessário executar algum comando específico sobre o arquivo de índices gerado em memória,
para informar ao Windows que a área de memória que ele ocupou está livre para ser usada por outro aplicativo ou um Simples CLOSE DATA já faz isso ?

Indices temporários, duvidas

Enviado: 04 Dez 2015 20:49
por asimoes
DbCloseArea() ou DbCloseAll() já libera o indice da memória.

Indices temporários, duvidas

Enviado: 04 Dez 2015 22:35
por Toledo
Só para complementar, se for necessário fechar o índice temporário sem ter que fechar o DBF, pode-se usar:

Código: Selecionar todos

OrdDestroy( "nome_do_arquico_temporario" )
Abraços,

Indices temporários, duvidas

Enviado: 05 Dez 2015 21:14
por lugab
Pessoal, muito obrigado por tanta assistência...

Coloquei o paramêtro MEMORY e , realmente, o desempenho ficou excepcional

Parabéns e muito obrigado a todos

Indices temporários, duvidas

Enviado: 17 Set 2016 23:59
por lugab
Olá Pessoal,

Que sintaxe devo usar em "set index to" e "Orsdsetfocus" qndo há 2 ou mais índices temporários, como no exemplo a seguir ?
(qdo há apenas 1 nem precisa citar o "Set index to", nem o "Ordsetfocus")

Código: Selecionar todos

sele 200
use  c:\Temp\saldflu exclusive alias Temp
zap
index on str(numcli,6) tag saldfluN Temporary
index on valor         tag saldfluV Temporary
Set index to ????
....
....
Sele Temp
Ordsetfocus(????)

Indices temporários, duvidas

Enviado: 18 Set 2016 10:05
por JoséQuintas
O que geralmente se esquece é que arquivo temporário em rede é terrível.
Eu uso a pasta temporária do Windows, que não tem problema de acesso, e caso esqueça de apagar, tá no lugar certo.... rs
Como é arquivo local, é na velocidade do HD.

Quanto à outra questão, parece que são sinônimos.

Código: Selecionar todos

#command INDEX ON <key> [TAG <(tag)>] TO <(bag)> ;
               [FOR <for>] [WHILE <while>] [NEXT <next>] ;
               [RECORD <rec>] [<rest:REST>] [<all:ALL>] ;
               [EVAL <eval>] [EVERY <every>] [<unique: UNIQUE>] ;
               [<ascend: ASCENDING>] [<descend: DESCENDING>] ;
               [<add: ADDITIVE>] [<cur: USECURRENT>] [<cust: CUSTOM>] ;
               [<noopt: NOOPTIMIZE>] [<mem: MEMORY, TEMPORARY>] ;
               [<filter: USEFILTER>] [<ex: EXCLUSIVE>] => ;
         ordCondSet( <"for">, <{for}>, [<.all.>], <{while}>, ;
                     <{eval}>, <every>, RecNo(), <next>, <rec>, ;
                     [<.rest.>], [<.descend.>],, ;
                     [<.add.>], [<.cur.>], [<.cust.>], [<.noopt.>], ;
                     <"while">, [<.mem.>], [<.filter.>], [<.ex.>] ) ;;
         ordCreate( <(bag)>, <(tag)>, <"key">, <{key}>, [<.unique.>] )
Nota: se não me engano, de nada adianta acrescentar a cláusula se não adicionar referência no fonte, e a LIB