[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