Questão de Banco de Dados — Índices — Quadrix 2025
- Código
- qg594746
- Banca
- Quadrix
- Órgão
- CFBio
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Sistemas
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: ERRADO (letra E). Os índices bitmap são eficientes para consultas que envolvem colunas com baixa cardinalidade (poucos valores distintos), e não alta cardinalidade. A alta cardinalidade faz com que o vetor de bits se torne esparso e ineficiente, além de aumentar o custo de atualização. Essa é a inversão clássica que a banca explora.
O índice bitmap é uma estrutura de acesso auxiliar que representa, para cada valor distinto de uma coluna, um vetor de bits indicando quais linhas da tabela possuem aquele valor. Essa representação é extremamente eficiente para operações booleanas (AND, OR, NOT) diretamente sobre os vetores, sem precisar acessar os dados reais até o resultado final. Por isso, é ideal para consultas analíticas que filtram por múltiplas colunas com poucos valores distintos, como sexo, estado civil, faixa etária, categoria de produto, etc.
A eficiência do bitmap está diretamente ligada à cardinalidade da coluna. Cardinalidade é o número de valores distintos que uma coluna pode assumir. Quando a cardinalidade é baixa (ex.: sexo com 2 valores, status com 5 valores), o número de vetores de bits é pequeno e cada vetor é denso (muitos bits 1), tornando as operações booleanas muito rápidas. Quando a cardinalidade é alta (ex.: CPF, telefone, código de produto com milhares de valores), o número de vetores cresce proporcionalmente, e cada vetor se torna esparso (poucos bits 1), o que degrada o desempenho e aumenta o consumo de espaço. Além disso, a atualização de índices bitmap é ineficiente, pois cada modificação em uma linha exige a atualização do bit correspondente em todos os vetores afetados.
Na prática, considere uma tabela de vendas com 10 milhões de linhas. Um índice bitmap sobre a coluna sexo (2 valores) criaria apenas 2 vetores de 10 milhões de bits cada, permitindo responder consultas como "quantas vendas foram feitas por mulheres" com uma simples contagem de bits 1. Já um índice bitmap sobre a coluna cpf_cliente (10 milhões de valores distintos) criaria 10 milhões de vetores, cada um com apenas 1 bit 1 — um desperdício enorme de espaço e tempo de processamento. Para colunas de alta cardinalidade, o índice B-tree é a escolha adequada, pois mantém os valores ordenados e permite acesso eficiente por igualdade e por intervalo.
A pegadinha desta questão está na inversão do termo "alta cardinalidade" por "baixa cardinalidade". O candidato que memoriza que "bitmap é bom para consultas com múltiplas colunas" pode marcar como certo, mas esquece que a eficiência depende crucialmente da cardinalidade. A regra de ouro é: bitmap para baixa cardinalidade, B-tree para alta cardinalidade. É exatamente esse critério que separa o certo do errado nesta assertiva.
Critério | Índice Bitmap | Índice B-tree |
|---|---|---|
Cardinalidade ideal | Baixa (poucos valores distintos) | Alta (muitos valores distintos) |
Eficiência em múltiplas colunas | Alta, via operações booleanas (AND/OR/NOT) | Menor, exige acesso sequencial ou combinação de índices |
Espaço consumido | Compacto em baixa cardinalidade; esparso e volumoso em alta | Proporcional ao número de valores; eficiente em alta cardinalidade |
Custo de atualização | Alto (atualiza todos os vetores afetados) | Baixo (atualização pontual na árvore) |
Uso típico | Data warehouse, consultas analíticas com filtros de dimensões | OLTP, consultas por igualdade e intervalo em colunas únicas ou compostas |
A afirmação de que os índices bitmap são eficientes para consultas que envolvem múltiplas colunas com alta cardinalidade está incorreta. O erro está na palavra "alta". Os índices bitmap são eficientes justamente para colunas de baixa cardinalidade, onde o número de valores distintos é pequeno. Com alta cardinalidade, o número de vetores de bits cresce, cada vetor se torna esparso, o consumo de espaço aumenta e as operações booleanas perdem eficiência. Para colunas de alta cardinalidade, o índice mais adequado é o B-tree, que mantém os valores ordenados e permite acesso eficiente por igualdade e por intervalo.
A banca troca "baixa cardinalidade" por "alta cardinalidade" para induzir ao erro. O candidato que sabe que bitmap é bom para consultas com múltiplas colunas pode marcar como certo, mas esquece que a eficiência depende da cardinalidade. Lembre-se: bitmap para baixa cardinalidade, B-tree para alta cardinalidade. Com treino, você enxerga essas inversões de longe 💪
Gabarito: ERRADO (letra E).
Link permanente: /questoes/qg594746