[firebase-br] Melhorar velocidade na consulta

Marcelo Moreira marcelomoreira.souza em gmail.com
Seg Jul 6 09:52:21 -03 2009


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!

-- 
Marcelo Moreira
(31) 8420-2723
E-mail / MSN: marcelomoreira.souza em hotmail.com
E-mail: marcelomoreira.souza em gmail.com
Skype: marcelomoreira.souza



Mais detalhes sobre a lista de discussão lista