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

Sergio Nascimento sergiojampapb em gmail.com
Sáb Jul 18 08:00:11 -03 2009


Acredito que a criação do indice indicado pelo Sandro Souza seja a
melhor alternativa.

E nada de ORDER BY neste caso.


2009/7/15 Sandro Souza <escovadordebits em gmail.com>:
> 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
>>
> ______________________________________________
> 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
>



-- 
Atenciosamente,

Sérgio Ricardo




Mais detalhes sobre a lista de discussão lista