Indice Bitmap

Oracle

24/08/2014

Pessoal preciso da ajuda de vocês.

Não consegui entender muito bem o funcionamento do indice Bitmap no Oracle.

Em vários locais li essa descrição sobre seu funcionamento:
"O índice bitmap é um tipo de índice que pode ser utilizado para otimizar consultas que utilizam como filtro de dados, colunas que possuem baixa cardinalidade."

Pode parecer simples, porem não consegui entender quando e como identificar se uma cardinalidade é alta ou baixa. Os exemplos que vi não foram suficientes.

Obrigado desde já.
Marcus Almeida

Marcus Almeida

Curtidas 0

Respostas

Marisiana Battistella

Marisiana Battistella

24/08/2014

Olá Marcus!
Pesquisei um pouco sobre o assunto e encontrei um artigo onde consta essas recomendações:
Índices bitmap são ótimos para otimizar consultas em colunas com baixa cardinalidade. Jamais crie índices bitmap em colunas que possuem alta cardinalidade, como por exemplo, colunas que possuem os valores da chave primária (PK´s) de uma tabela, pois além do Oracle não permitir criar índices bitmap em PK´s, nestes casos eles seriam extremamente ineficientes. Para colunas com alta cardinalidade utilize índices b-tree (tipo de índice padrão do Oracle Database).
Não crie índices bitmap em colunas de tabelas que sofrem atualizações frequentes (o que ocorre normalmente em BD´s OLTP). Isso irá degradar demasiadamente a performance das atualizações, podendo gerar locks e erros nas aplicações (que podem ocorrer como consequência de deadlocks).

Confira o artigo, pois há mais informações que podem ser importantes: Otimizando consultas com índices BITMAP
GOSTEI 0
Marcus Almeida

Marcus Almeida

24/08/2014

Olá Marisiana!

Eu dei uma lida no conteúdo do Fabio Prado antes de postar aqui, consegui entender perfeitamente como funciona (achei ótimo esse conteúdo), porem minha dificuldade está em identificar a diferença entre alta cardinalidade e baixa cardinalidade.

Seria mais ou menos, um exemplo de baixa cardinalidade, fazer uma consulta para retornar todas as cidades de cada estado? Onde eu sei a quantia exata de estados - criaria um indice Bitmap no campo sigla, por exemplo.

create bitmap index ix_sigla_uf on uf(sigla);


SELECT u.sigla, COUNT(e.codigo) 
FROM uf u JOIN estado e 
ON u.codigo=e.codigo;

Na tabela de cidades, a cardinalidade alta seria para o conjunto de cidades retornada para cada estado?
GOSTEI 0
POSTAR