[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