Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Rushmore: Não entendo mais nada...
Message
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00642983
Message ID:
00643676
Views:
11
[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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform