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

Clelson Augusto clelson_br em hotmail.com
Seg Dez 4 18:09:40 -03 2006


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?




Mais detalhes sobre a lista de discussão lista