[firebase-br] RES: RES: RES: RES: Melhorar velocidade na consulta

Sandro Souza escovadordebits em gmail.com
Qua Jul 15 11:45:39 -03 2009


Bom dia/tarde Marcelo.

Grande Marcelo, faço aqui a minha humilde sugestão.

Baseado nas condições do seu comando UPDATE, que tão criar  um índice que
leve em consideração esses campos de sua cláusula WHERE, ou seja, não criar
um índice para cada um desses campos, mas um índice contendo todos eles ou a
maior parte, por exemplo:

CREATE INDEX IX_ENVIA_TESTE ON ENVIA (ENVIA_STATUS, PRIORIDADE,
DATA_INICIAL);

Tente novamente executar o seu UPDATE e verifique tanto o tempo de resposta
quanto o plano que foi utilizado pelo Firebird para verificar se houve
realmente uma melhora seguindo por esse caminho.

Espero ter ajudado mais que atrapalhado. :D

2009/7/7 Marcelo Moreira <marcelomoreira.souza em gmail.com>

> Douglas,
>
> No caso eu nao faço a exclusão de varios registros ao mesmo tempo e sim na
> medida em que termino de trabalhar com determinado registro. Faco o uso do
> registro, copio estas informações para outra tabela que por sua vez tem uma
> trigger que faz o serviço de deletar o registro.
>
>    update
>      ENVIA E
>    set
>      E.ID_ENVIA_STATUS = 2
>    where
>      E.ID_ENVIA = (
>  select
>    first(1) EN.ID_ENVIA
>  from
>    ENVIA EN
>  where
>    (EN.ID_ENVIA_STATUS = 1) and
>    (EN.PRIORIDADE = 1) and
>    (current_date >= EN.DATA_INICIAL) and
>    (current_time between EN.HORA_INICIAL and EN.HORA_FINAL)
>     )
>
>
>
> Plan
> PLAN (EN NATURAL)
> PLAN (E INDEX (PK_ENVIA))
> Adapted Plan
> PLAN (EN NATURAL) PLAN (E INDEX (PK_ENVIA))
>
> Vou ir ate o cliente para fazer o teste ai posto o resultado.
>
> Obrigado pela atencao!
>
> 2009/7/7 Douglas Tosi <douglasht em gmail.com>
>
> > 2009/7/7 Marcelo Moreira <marcelomoreira.souza em gmail.com>:
> > > Quantos registros tem a tabela?
> > >
> > > R: Esta tabela nao fica com muitos registros armazenados pois a medida
> > que o
> > > sistema vai trabalhando ele retira o registro desta tabela e joga em
> > outra
> > > tabela identica onde vou guardando o historico. Só pra voce entender se
> > > trata de um sistema que realiza envio de SMS em massa. Entao vamos
> > imaginar
> > > que um cliente me enviou uma remessa de 100.000 registros. A medida que
> > as
> > > mensagens vao sendo enviadas a tabela vai ficando com menos registros.
> Ou
> > > seja nesta tabela hora pode ter 100.000 hora pode ter 100 registro ou
> ate
> > > mesmo nada.
> >
> > Um outro problema que você pode ter é depois de apagar uma massa de
> > dados, o próximo select vai tentar fazer garbage collect. Isto pode
> > demorar. Será que não é isto? Ou o comando é lento todas as vezes?
> >
> > > Qual a distribuição de valores nos campos id_envia_status e prioridade?
> > > R: ID_ENVIA_STATUS só assume dois valores (1 - Pendente; 2 - Reservado)
> e
> > > prioridade tambem so pode assumir dois  valores (1; 2)
> >
> > Estes casos são complicados porque dependem do tempo.
> > Novamente, qual o plano de execução?
> >
> > De qualquer maneira vale uma tentativa:
> > Crie um índice em hora_final e teste com o seu sql original e também com
> > esse:
> > update
> >     ENVIA E
> >   set
> >     E.ID_ENVIA_STATUS = 2
> >   where
> >     E.ID_ENVIA = (  select
> >   first(1) EN.ID_ENVIA
> >  from
> >   ENVIA EN
> >  where
> >   (EN.ID_ENVIA_STATUS = 1) and
> >   (EN.PRIORIDADE = 1) and
> >   (current_date >= EN.DATA_INICIAL) and
> >   (current_time between EN.HORA_INICIAL and EN.HORA_FINAL)
> > order by en.hora_final)
> >
> > --
> >  Douglas Tosi
> > www.sinatica.com
> >
> > ______________________________________________
> > 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
> >
>
>
>
> --
> Marcelo Moreira
> (31) 8420-2723
> E-mail / MSN: marcelomoreira.souza em hotmail.com
> E-mail: marcelomoreira.souza em gmail.com
> Skype: marcelomoreira.souza
> ______________________________________________
> 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