Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Rushmore: Não entendo mais nada...
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Divers
Thread ID:
00642983
Message ID:
00643676
Vues:
12
[mensagem longa]

Verifiquei o que me enviou e tenho algumas consideração (que podem não ser verdadeiras :D)
Select Sum(Faturamento_03b.QtdOri - Faturamento_03b.QtdEfe) As Qtdade;
   From Faturamento_03b Left Outer Join Faturamento_03a;
   On Faturamento_03b.Processo = Faturamento_03a.Processo;
   Where Faturamento_03b.Item = "MO             " .and.;
         Faturamento_03b.QtdOri > Faturamento_03b.QtdEfe .and.;
         Faturamento_03a.OP_Reserva = "S";
   Into Cursor Teste
Observe que a única coisa que realmente esta sendo usada o rushmore é o "processo", porém, ele não esta na WHERE, assim o sistema tem que percorrer toda a tabela, validar a where (que tem 2 tabelas) para dai sim fazer com que o inner join realmente funcione.

Note que neste caso a parte que cabe ao rushmore é insignificante, e até atrapalha, visto que ele tem que ficar verificando a 03a.OP_Reserva, depois disparar o rushmore, fazer a consulta, voltar a 03a para o ponteiro que esta no where (isso na minha singela ignorancia)...

Se você quiser que o rushmore realmente trabalhe nesta select, crie indices para os campos da clausula Where, mas eu não coloquei para o OP_Reserva, visto que como é apenas 1 caracter não sei o que tem nele e como ficaria balanceado.

Resultados:

Com indices do Join: 13 Segundos
Sem indices do Join: 14 Segundos

Colocando indices nas WHERE (03b.Item e 03b.QtdOri)

Sem rushmore : 17 Segundos
Com rushmore : 2 Segundos

Conclusão: A otimização mais importante é a do Where, se você tem que percorrer toda a tabela para dai executar um join otimizado, não vai adiantar muito.
Cordialmente,

Fabiano Costa
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform