[firebase-br] RES: Select com performance ruim
Felix
felix.sol em terra.com.br
Sáb Jun 11 21:13:37 -03 2011
Se vc mudar isto:
where (M.STATUS = 'F') and
(M.DATAMOVIMENTACAO between '01/01/1900' and current_date) and
(((M.COD_CEDENTE = 'L000001') and (M.TIPO = 'S')) or
((M.COD_REQUISITANTE = 'L000001') and (M.TIPO = 'E'))) and
(I.COD_PRODUTO = '00000402')
Para isto:
where (I.COD_PRODUTO = '00000402') and
(M.STATUS = 'F') and
(M.DATAMOVIMENTACAO between '01/01/1900' and current_date) and
(((M.COD_CEDENTE = 'L000001') and (M.TIPO = 'S')) or
((M.COD_REQUISITANTE = 'L000001') and (M.TIPO = 'E')))
Melhora algo?
Tambem não entendi o filtro da data, parece que ele vai retornar todos os
registros, não?
Fco. Felix
Desenvolvimento de Sistemas
www.soltecnologia.com.br
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Humberto S. Reis
Enviada em: sábado, 11 de junho de 2011 19:48
Para: FireBase
Assunto: [firebase-br] Select com performance ruim
Pessoal, boa noite,
Tenho o select abaixo que retorna somente 6 registro, mas varre a tabela
MOVIMENTACAO e lê mais de 66.000 registros, quando deveria ler os 6
registros correspondentes (ITEMMOVIMENTACAOPRODUTO e filha da tabela
MOVIMENTACAO). Como resolver isso, sem duplicar campos, já que o filtro é
pelo status da MOVIMENTACAO e datamovimentacao, também da tabea
MOVIMENTACAO?
select I.RDB$DB_KEY, I.COD_UNIDADE, I.VALORUNITARIO, I.QUANTIDADE,
I.ALIQUOTAIPI, I.BASEICMSSUBSTITUIDO, I.ALIQUOTAICMS, I.CODIGO,
I.COD_MOVIMENTACAO, I.TIPOMOVIMENTACAO, M.COD_REQUISITANTE,
M.COD_CEDENTE, M.VALORIPI, M.DATAMOVIMENTACAO, I.VALORRATEIO,
M.TOTAL_CONHECIMENTO, M.TIPOFRETE,M.VALORFRETEEXTRA, M.VALORDAE,
M.COD_TIPOMOVIMENTACAO, M.COD_TIPODOCUMENTO, M.BDI,
I.VALORICMSSUBSTITUIDO, M.TOTAL, I.VALORITEM,
(I.VALORRATEIO_FRETE + I.VALORRATEIO_SEGURO + I.VALORRATEIO_OUTRO),
I.BASEICMS, M.VALOR_DESC_FINANCEIRO
from MOVIMENTACAO M
join ITEMMOVIMENTACAOPRODUTO I on
(M.CODIGO = I.COD_MOVIMENTACAO and M.TIPO = I.TIPOMOVIMENTACAO)
where (M.STATUS = 'F') and
(M.DATAMOVIMENTACAO between '01/01/1900' and current_date) and
(((M.COD_CEDENTE = 'L000001') and (M.TIPO = 'S')) or
((M.COD_REQUISITANTE = 'L000001') and (M.TIPO = 'E'))) and
(I.COD_PRODUTO = '00000402')
order by I.COD_PRODUTO,M.DATAMOVIMENTACAO, M.CODIGO, M.TIPO, I.CODIGO
Ps. Não uso FK, faço o controle de integridade via trigger´s.
--
Humberto S. Reis
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista