[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