[firebase-br] RES: RES: RES: RES: Melhorar velocidade na consulta
Douglas Tosi
douglasht em gmail.com
Ter Jul 7 13:42:25 -03 2009
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
Mais detalhes sobre a lista de discussão lista