Ajuda com query.

Firebird

11/02/2010

Boa tarde a todos, estou com um problema no qual não consigo achar solução, sem mudanças drásticas...

Vamos lá,

tenho a seguinte Tabela

CREATE TABLE CUSTOMER (
ID BIGINT NOT NULL,
NAME VARCHAR(256) CHARACTER SET NONE COLLATE NONE,
DOCUMENT_TYPE INTEGER,
DOCUMENT_NUMBER VARCHAR(100) CHARACTER SET NONE COLLATE NONE,
DISPATCHER VARCHAR(256) CHARACTER SET NONE COLLATE NONE,
DOCUMENT_STATE CHAR(2) CHARACTER SET NONE COLLATE NONE);


ALTER TABLE CUSTOMER ADD CONSTRAINT PK_CUSTOMER PRIMARY KEY (ID);


CREATE INDEX IDX_CUSTOMER_ID ON CUSTOMER(ID);;


com exatamente 4342 registro (Teoricamente muito pouco)

Porém qualquer simples consulta que eu faça ao banco utilizando a SQL a seguir

SELECT * FROM customer WHERE name = ´guilherme´;

Leva no mínimo 78ms até 94ms para executar.

Começei a realizar estes testes porque esta achando muito lenta essa outra SQL

SELECT COUNT(id) FROM customer WHERE ((UPPER(udf_CollateBr(name)) like UPPER(udf_CollateBr(´¬gu¬´ ))))

Que Leva entre 95ms até 108ms para executar.

Alguem poderia tentar me ajuda?

Muito Obrigado a Todos.

Att,
Guilherme.


Psyke

Psyke

Curtidas 0

Respostas

Robson Catunda

Robson Catunda

11/02/2010

psyke,

Primeiramente, vc não precisa criar um índice para um campo que já é uma chave primary key. A primary key já é um índice. Logo,  "CREATE INDEX IDX_CUSTOMER_ID ON CUSTOMER(ID)" não é necessário.

Quanto à velocidade, vc deve criar um índice com o campo NAME.

Outra coisa, se o banco já vem sendo usado ou testado há algum tempo, quer dizer, já teve muita inclusão e exclusão de registros, é bom vc fazer um backup e restore com o gbak. Isso elimina o lixo do banco e reorganiza ou atualiza os índices.
GOSTEI 0
Robson Catunda

Robson Catunda

11/02/2010

ah..  um lembrete pra completar a resposta:

alguns comandos como UPPER(NAME) , %NAME , %NAME% e CONTAINING NAME, ignoram os índices existentes utilizando apenas o plano natural e ficando mais lentas as consultas.
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

11/02/2010

Resolvido ?
GOSTEI 0
POSTAR