[firebase-br] Melhorar velocidade na consulta
Armando Boza Gonçalves
armando.boza em gmail.com
Seg Jul 6 12:07:52 -03 2009
Esperimente criar indices nos campos que estão no WHERE e AND.
Att
Armando
Marcelo Moreira escreveu:
> Pessoal,
> Bom dia!
>
> Em um banco Firebird 2.1 rodando no Windows XP SP3 tenho a seguinte tabela:
>
> CREATE TABLE ENVIA (
> ID_ENVIA NUMERIC(18,0) NOT NULL,
> PRIORIDADE INTEGER NOT NULL,
> ID_ENVIA_STATUS INTEGER DEFAULT 1 NOT NULL,
> DATA_INICIAL DATE NOT NULL,
> HORA_INICIAL TIME NOT NULL,
> HORA_FINAL TIME NOT NULL,
> DESTINATARIO CHAR(12) NOT NULL,
> MENSAGEM VARCHAR(160) NOT NULL,
> ID_CLIENTE INTEGER NOT NULL,
> ID_REMESSA INTEGER,
> TENTATIVA INTEGER DEFAULT 0 NOT NULL,
> DATA DATE NOT NULL,
> HORA TIME NOT NULL
> );
>
> ALTER TABLE ENVIA ADD CONSTRAINT PK_ENVIA PRIMARY KEY (ID_ENVIA);
>
>
> O que acontece é que nesta tabela eu tenho muitos registros e estou
> trabalhando com o seguinte select para fazer um UPDATE em determinado
> 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))
>
> O que acontece é que estou precisando melhorar a velocidade neste processo
> pois a medida que eu tenho mais registros nesta tabela o tempo para realizar
> o UPDATE esta sendo maior.
>
> 1 - Criando indices nos campos que eu uso no segundo WHERE poderia resolver
> o problema?
> 2 - Com mais quatro indices eu poderia estar gerando algum outro tipo de
> problema, mesmo que seja a longo prazo?
>
> Grato pela atenção!
>
>
Mais detalhes sobre a lista de discussão lista