Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
A respeito de lentidão em rede.
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Divers
Thread ID:
00792165
Message ID:
00796502
Vues:
36
Thiago,

Pra ativar a otimização RUSHMORE basta que o campo analisado na cláusula WHERE seja índice.

Índice Simples
Se você tiver uma tabela que tenha um campo de nome Documento e esse campo for índice terá que colocar a cláusula WHERE da seguite maneira:
WHERE Documento = "123"
Índice Composto
Cuidado com índices compostos. Se tiver um índice composto por "UF+Documento" por exemplo, não poderá utilizar
WHERE (UF = "PR") and (Documento = "123")
mas terá que utilizar
WHERE UF+Documento = "PR123"
Porque, neste caso, não há um indice UF e outro Documento, mas há o índice "UF+Documento".

SET DELETED
Quando a definição DELETED estiver ON, mesmo estando utilizando otimização FULL o VFP
mostrará PARCIAL porque, neste caso, a condição considerada pela cláusula WHERE será a condição digitada mais "AND NOT Deleted()".
Assim quando você digitar:
WHERE Documento = "123"
Se DELETED estiver ON o VFP executará:
WHERE (Documento = "123") and (not Deleted())&& Por isso é mostrado RUSHMORE parcial
SET COLLATE
No momento em que você executar o SELECT-SQL o COLLATE tem que ser o mesmo que estava quando você criou o índice.
Se você der SET COLLATE TO "MACHINE", criar o índice, der SET COLLATE TO "GENERAL" e executar o SELECT-SQL também a otimização não funcionará porque o COLLATE foi mudado.
---
Estes são alguns dos comportamentos. Pra ter melhor idéia do que tentei falar copie o bloco luminoso abaixo, cole no VFP e execute-o.
---
Clear
CriarDados()
Sys(3054, 12) && Liga a exibição do nível de otimização
Set Deleted On && Assim será mostrado PARCIAL
?"------------- NONE -------------------"
Select * from C:\TESTES\THREAD792165\Nomes where I_Codigo < 10 into cursor curNone
?"------------- PARCIAL ----------------"
Select * from C:\TESTES\THREAD792165\Nomes where C_Nome = 'G' into cursor curParcial
?"------------- FULL -------------------"
Set Deleted Off && Assim será mostrado FULL
Select * from C:\TESTES\THREAD792165\Nomes where C_Nome = 'G' into cursor curFull
?"------------- COLLATE diferente do do índice -------------------"
Set Collate To "GENERAL"
Select * from C:\TESTES\THREAD792165\Nomes where C_Nome = 'G' into cursor curGeneral
?"------------- COLLATE igual ao do índice -------------------"
Set Collate To "MACHINE"
Select * from C:\TESTES\THREAD792165\Nomes where C_Nome = 'G' into cursor curMachine
**********************************************************************************
Procedure CriarDados
  If Directory("C:\TESTES\THREAD792165")
    Return
  EndIf
  MkDir C:\TESTES\THREAD792165
  Create table C:\TESTES\THREAD792165\Nomes (I_Codigo I, C_Nome C(20))
  Set Collate To "MACHINE"
  Index On C_Nome tag Nome
  For I = 1 to 10
    lcC = Iif(I = 1, "Adao", Iif(I = 2, "Jose", Iif(I = 3, "Joao", Iif(I = 4, "Carlos",;
          Iif(I = 5, "Amadeu", Iif(I = 6, "Sampaio", Iif(I = 7, "Lopes",;
          Iif(I = 8, "Geraldo", Iif(I = 9, "Marcia", "Telma")))))))))
    For J = 1 to 10
      lcNome = lcC + " - Teste" + (Alltrim(Str(J)))
      Insert into C:\TESTES\THREAD792165\Nomes (I_Codigo, C_Nome) ;
                  values (Reccount("Nomes") + 1, lcNome)
    EndFor  
  EndFor  
EndProc && Procedure CriarDados
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform