[firebase-br] RES: Select com performance ruim

Humberto S. Reis hsreisjr em gmail.com
Sáb Jun 11 22:19:59 -03 2011


O intervalo de datas é porque posso filtrar um conjunto de registros do
intervalo mas, neste caso está pegando todos. O problema é que ele filtra
somente 6 registros da tabela ITEMMOVIMENTACAOPRODUTO e 66.000 da
tabela MOVIMENTACAO, quando eu esperava que fossem também 6 registros. Com
relação a mudança proposta não melhora a performance.

Abaixo envio o plano:

Plan
PLAN SORT (JOIN (M INDEX (IDX_MOVIMENTACAO_COD_ORIGINAL, MOVIMENTACAO_IDX1,
MOVIMENTACAO_DATAMOVIMENTACAO), I INDEX (ITEMMOVIMENTACAOPRODUTO_IDX1)))

Adapted Plan
PLAN SORT (JOIN (M INDEX (IDX_MOVIMENTACAO_COD_ORIGINAL, MOVIMENTACAO_IDX1,
MOVIMENTACAO_DATAMOVIMENTACAO), I INDEX (ITEMMOVIMENTACAOPRODUTO_IDX1)))



Em 11 de junho de 2011 21:13, Felix <felix.sol em terra.com.br> escreveu:

> 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
>
>
> ______________________________________________
> 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
>



-- 
Humberto S. Reis



Mais detalhes sobre a lista de discussão lista