[firebase-br] Teste condicional aumenta o tempo de resposta?

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Ter Dez 5 12:37:57 -03 2006


Eu tenho a impressão que há alguma coisa errada com o seu teste.

A primeira consulta deve estar aproveitando os dados da cache (assim com a 
terceira). Experimente reiniciar o FireBird antes de testar cada um destes 
Selects...

Outra coisa, como você fez para saber a quantidade de leituras de cada 
tabela ?

======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================
"Posso não concordar com nada do que dizes.
Mas defenderei até a morte o seu direito de dizê-lo"
(Voltaire 1694-1778)
----- Original Message ----- 
From: "Clelson Augusto" <clelson_br em hotmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Monday, December 04, 2006 6:09 PM
Subject: [firebase-br] Teste condicional aumenta o tempo de resposta?


Porque uma simples condição a mais aumenta a qtde de leituras e 
consecutivamente o tempo resposta?

1) Primeiro Consulta

SELECT COUNT(*) FROM LOTES
INNER JOIN PEDIDOS ON PEDIDOS.LOTE = LOTES.LOTE AND PEDIDOS.FILIAL = 
LOTES.FILIAL
INNER JOIN PEDITENS ON PEDITENS.PEDIDO=PEDIDOS.PEDIDO
INNER JOIN CLIENTES ON CLIENTES.CLIENTE=PEDIDOS.CLIENTE
WHERE LOTES.TIPOLOTE = 'S' AND LOTES.ACERTADO='S'

LEITURAS:
Clientes:  279
Lotes:  15
Pedidos:  279
PedItens:  802

2) Segunda Consulta

SELECT COUNT(*) FROM LOTES
INNER JOIN PEDIDOS ON PEDIDOS.LOTE = LOTES.LOTE AND PEDIDOS.FILIAL = 
LOTES.FILIAL
INNER JOIN PEDITENS ON PEDITENS.PEDIDO=PEDIDOS.PEDIDO
INNER JOIN CLIENTES ON CLIENTES.CLIENTE=PEDIDOS.CLIENTE
WHERE LOTES.TIPOLOTE = 'S' AND LOTES.ACERTADO='S'
      AND PEDITENS.PRODUTO < 10000

LEITURAS:
Clientes:  4239
Lotes:   76101
Pedidos:    76101
PedItens:   798

Só adicionei  "AND PEDITENS.PRODUTO < 10000"

3) Terceira Consulta

SELECT COUNT(*) FROM LOTES
INNER JOIN PEDIDOS ON PEDIDOS.LOTE = LOTES.LOTE AND PEDIDOS.FILIAL = 
LOTES.FILIAL
INNER JOIN PEDITENS ON PEDITENS.PEDIDO=PEDIDOS.PEDIDO
INNER JOIN CLIENTES ON CLIENTES.CLIENTE=PEDIDOS.CLIENTE
WHERE LOTES.TIPOLOTE = 'S' AND LOTES.ACERTADO='S'
      AND CAST(PEDITENS.PRODUTO AS INTEGER) < 10000

Isso é muito estranho!  Se colocar um CAST aumenta a velocidade e volta para 
o mesmo resultado da Primeiro Consulta.

Mais um detalhe, o campo PEDITENS.PRODUTO é indice.

Isso é normal? Tem que colocar o CAST mesmo?

______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista