Re: [firebase-br] Índice e operador de menor/maior

Carlos H. Cantu listas em warmboot.com.br
Sáb Jan 1 12:19:46 -03 2005


Qual a seletividade do índice referente ao campo erro?

[]s
Cantu
http://www.warmboot.com.br
FireBase - http://www.FireBase.com.br

DT> Estou fazendo alguns testes por aqui e cheguei a uma situação curiosa. Criei
DT> uma tabela com a estrutura abaixo:

DT> CREATE TABLE Trunca(
DT>   Codigo  INTEGER NOT NULL,
DT>   Valor1  NUMERIC(18,4) NOT NULL,
DT>   Valor2  NUMERIC(18,4) NOT NULL,
DT>   Seguro  NUMERIC(18,4) NOT NULL,
DT>   UDF1    NUMERIC(18,4) COMPUTED(TBTruncDec(Valor1 * Valor2, 4)),
DT>   UDF2    COMPUTED(TBTruncDec(Valor1 * Valor2, 4)),
DT>   Erro    SMALLINT NOT NULL,
DT>   CONSTRAINT PK_Trunca PRIMARY KEY(Codigo));

DT> CREATE INDEX IDX_Trunca_Erro ON Trunca(Erro);

DT> Via programa feito em Delphi, inseri alguns milhões de registros nesta
DT> tabela (6.198.200). Rodei o SELECT abaixo com vários filtros diferentes e
DT> notei todas as vezes em que os operadores < e > foram usados com o campo
DT> "Erro" o tempo de resposta foi demasiadamente longo, mesmo usando índice.

DT> SELECT * FROM Trunca

DT> ---------- Filtrando pelo campo Erro, o qual tem índice
DT> secundário -----------

Filtro: Erro >> 0
DT> Linhas retornadas: nenhuma
DT> Tempo: mais de 2 minutos
DT> PLAN (TRUNCA INDEX (IDX_TRUNCA_ERRO))

DT> Filtro: Erro < 0
DT> Linhas retornadas: nenhuma
DT> Tempo: quase 2 minutos
DT> PLAN (TRUNCA INDEX (IDX_TRUNCA_ERRO))

DT> Filtro: Erro = 1
DT> Linhas retornadas: nenhuma
DT> Tempo: instantâneo
DT> PLAN (TRUNCA INDEX (IDX_TRUNCA_ERRO))

DT> ---------- Filtrando pelo campo Codigo, que é chave-primária ----------

Filtro: Codigo >> 7000000
DT> Linhas retornadas: nenhuma
DT> Tempo: instantâneo
DT> PLAN (TRUNCA INDEX (PK_TRUNCA))

DT> Filtro: Codigo < 0
DT> Linhas retornadas: nenhuma
DT> Tempo: instantâneo
DT> PLAN (TRUNCA INDEX (PK_TRUNCA))

DT> Filtro: Codigo = 100
DT> Linhas retornadas: uma
DT> Tempo: instantâneo
DT> PLAN (TRUNCA INDEX (PK_TRUNCA))

DT> Dúvida:

DT> Porque os operadores relacionais < e > são tão lentos quando está sendo
DT> usado um índice secundário? Seria um problema no otimizador do Firebird?
DT> Alguém sabe alguma coisa sobre isto?

DT> Atenciosamente.

DT> Daniel P. Guimarães
DT> Tecnobyte informática


DT> ______________________________________________
DT> FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
DT> Para editar sua configuração na lista, use o endereço
DT> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br





Mais detalhes sobre a lista de discussão lista