Índice Bitmap

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
diegoathayde
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Seg, 30 Ago 2004 7:11 pm
Localização: Rio de Janeiro
Diego Athayde

Pessoal,

Gostaria da ajuda de algum dos participantes do Fórum. Meu problema é o seguinte:
Tenho uma tabela com 47 milhões de registros e nessa tabela existe uma coluna que se chama ID_DELTA_MESES, onde ela varia de 0 a 62 e se repete N vezes na tabela.
Como essa coluna é muito acessada eu criei um índice bitmap por essa coluna, mas sempre que rodo o plano de execução com um select simples por essa coluna: select * from tabela where id_delta_meses = 1, está dando FULL na tabela e o índice é ignorado.
Então criei o índice SEM ser bitmap e quando faço o mesmo select o plano de execução vai pelo índice e o select é bem mais rápido, mas não é o mesmo tempo que seria com o bitmap.
Sempre soube que a criação do índice bitmap é em colunas com baixa Cardinalidade (muitas repetições do mesmo valor na coluna dentro da tabela), o que seria meu caso.

A pergunta é: Por que o oralce está ignorando meu índice bitmap ? Todos sabemos que o bitmap é mais rápido que o normal, o que deveria fazer para que o bitmap funcione?
Qualquer dica que possa me ajudar será de grande valia

Abraços
Diego Athayde
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Posso estar enganado, mas talvez tenha que ser necessário rodar um analyse pra fazer efeito. ( :?: )

Outra coisa: Verifique se sua tabela recebe muitos UPDATES, pois isso pode gerar problemas com índices bitmap. (É necessário bem mais recurso pra manter um índice bitmap). E no seu caso, eu creio que 62 opções é muito pra um índice bitmap. Acho que um índice comum (b-tree) seria melhor mesmo.

Sugiro dar uma olhada nesse exemplo:
http://www.akadia.com/services/ora_bitmapped_index.html
diegoathayde
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Seg, 30 Ago 2004 7:11 pm
Localização: Rio de Janeiro
Diego Athayde

Dr_gori,

O analyse eu já tinha feito, tanto no índice como na tabela.
A tabela não sofre atualizações, porque é um sistema de BI, então as tabelas só sofrem atualização através de carga, isso só ocorre uma vez por semana ou de 15 em 15 dias.

No documento que me passou fala o seguinte:

Selecionar tudo

Bitmap Indexes
For columns with very few unique values (low cardinality) 
Columns that have low cardinality are good candidates (if the cardinality of a column is <= 0.1 %  that the column is ideal candidate, consider also 0.2% – 1%)
De acordo com o meu caso acho que se encaixa bem, porque tenho uma tabela de 47 milhões de linha sendo que essa coluna tem variação de 63 itens nessa minha tabela (0 a 62), que significa muito menos de 1% da tabela.

O que acho estranho é porque dele nem mostrar o índice no plano de execução e o B-Tree mostrar.
Se tiver alguma ajuda!

Abraços
Diego
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5026
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

diegoathayde escreveu:O que acho estranho é porque dele nem mostrar o índice no plano de execução e o B-Tree mostrar.
Eu tb to encucado com isso :?
diegoathayde
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Seg, 30 Ago 2004 7:11 pm
Localização: Rio de Janeiro
Diego Athayde

O pior é que já procurei em tudo quanto é lugar e não consegui ver nenhum exemplo.
Agora fiz um teste e aconteceu a mesma coisa... se quiser faz aí tb:

--Criei tabela de teste

Selecionar tudo

create table prj_cicop.bit
(cod number, val number)
-- inseri 6 linhas (Note que o campo cod é auto-numérico e o campo val se repete 4 vezes cada número).

Selecionar tudo

insert into bit values (1, 1);
insert into bit values (2, 1);
insert into bit values (3, 1);
insert into bit values (4, 1);
insert into bit values (5, 2);
insert into bit values (6, 2);
insert into bit values (7, 2);
insert into bit values (8, 2);
commit;
--Depois criei um index bitmap

Selecionar tudo

create bitmap index indx_bit on bit (val);
(Logo após tirei o plano de execução da tabela e o índice não é reconhecido)

--Dropei o índice bitmap

Selecionar tudo

drop index indx_bit;
--Depois criei um index B-tree

Selecionar tudo

create index indx_bit on bit (val);
(Logo após tirei o plano de execução da tabela e o índice aparece sem problemas)

Isso é muito estranho e não consigo achar uma lógica.

Abraços
Diego Athayde
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante