Pular para o conteúdo principal

Questão de Banco de Dados — Otimização (Tuning) em Banco de Dados — FGV 2024

Banco de DadosOtimização (Tuning) em Banco de Dados
Código
fg165192
Banca
FGV
Órgão
CM SP
Ano
2024
Cargo
Cons Leg ( )
Os processos de otimização de consultas SQL em ambientes Oracle podem utilizar diversos tipos de índices.   O tipo de índice adequado para colunas que possuem um número relativamente baixo de valores, para aplicações de armazenamento de dados em que há baixa atividade de declarações SQL do tipo DML e filtragens ad hoc e eficiente em consultas com a função COUNT ( ) denomina-se índice
  1. Abaseado em função.
  2. Bchave reversa.
  3. Cparticionado.
  4. Dárvore B.
  5. Ebitmap.
Revelar gabarito e comentário

GabaritoE — bitmap.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Índice Bitmap: Baixa Cardinalidade e Consultas Analíticas

Gabarito: letra E. O índice bitmap é o tipo adequado para colunas com baixa cardinalidade (poucos valores distintos), típico de ambientes de data warehouse com baixa atividade de DML e consultas analíticas ad hoc, sendo especialmente eficiente para a função COUNT(). Essa é a definição clássica do índice bitmap, amplamente documentada na literatura de banco de dados.

O índice bitmap é uma estrutura de dados que representa cada valor distinto de uma coluna como um mapa de bits (bitmap), onde cada bit indica se a linha correspondente possui aquele valor. Essa representação é extremamente compacta e permite que operações como COUNT(), AND, OR e NOT sejam realizadas diretamente sobre os bitmaps, sem acessar a tabela. Por isso, é ideal para colunas com baixa cardinalidade (ex.: sexo, status, categoria), onde o número de valores distintos é pequeno em relação ao total de linhas.

A adequação ao ambiente de data warehouse se deve a duas características: (1) baixa atividade de DML — como os dados são carregados em lote (ETL) e raramente atualizados, o custo de manutenção do índice (que é alto em operações de INSERT/UPDATE/DELETE) é aceitável; (2) consultas ad hoc — os usuários fazem filtros imprevisíveis e combinações de colunas, e o bitmap permite responder rapidamente a essas consultas, especialmente com COUNT() e agregações.

Para entender a diferença, compare com o índice B-tree (árvore B), que é o padrão e mais usado em bancos transacionais (OLTP). A árvore B é eficiente para consultas por igualdade e por faixa de valores, mas não é eficiente para colunas com baixa cardinalidade, pois a seletividade é baixa e o índice acaba sendo pouco útil. Já o bitmap, ao contrário, é ineficiente em ambientes com muitas escritas, pois cada atualização exige a reconstrução dos bitmaps.

A pegadinha da banca está em associar o índice bitmap a colunas com baixa cardinalidade e a ambientes analíticos (data warehouse), enquanto o candidato pode confundir com o índice B-tree, que é o mais comum. A questão descreve exatamente o cenário típico do bitmap: "número relativamente baixo de valores", "baixa atividade de DML", "filtragens ad hoc" e "eficiência em COUNT()".

Guarde a fronteira: bitmap = baixa cardinalidade + ambiente analítico (DW) + poucas escritas; B-tree = alta cardinalidade + ambiente transacional (OLTP) + muitas escritas. É nessa distinção que as alternativas se separam.

Critério

Bitmap (E)

B-tree (D)

Baseado em função (A)

Chave reversa (B)

Particionado (C)

Cardinalidade ideal

Baixa (poucos valores distintos)

Alta (muitos valores distintos)

Qualquer (depende da expressão)

Alta (chaves sequenciais)

Qualquer (depende da estratégia)

Ambiente típico

Data warehouse (DW)

OLTP (transacional)

OLTP/DW (depende do uso)

OLTP (alta concorrência)

DW/OLTP (tabelas grandes)

Atividade de DML

Baixa (poucas escritas)

Alta (muitas escritas)

Moderada

Alta (inserções sequenciais)

Moderada

Eficiência em COUNT()

Alta (operações diretas nos bitmaps)

Baixa (acesso à tabela)

Baixa

Baixa

Baixa

Consultas ad hoc

Excelente (combinações imprevisíveis)

Boa (igualdade/faixa)

Boa (quando usa a função)

Ruim

Boa (com poda de partições)

Alternativa A — ❌ Incorreta

O índice baseado em função (function-based index) é criado sobre o resultado de uma expressão ou função aplicada a uma coluna (ex.: UPPER(nome)). Ele é útil quando as consultas filtram por uma função, mas não tem relação com baixa cardinalidade nem com eficiência em COUNT(). A banca o coloca como distrator para confundir com a ideia de "função" aplicada à coluna, mas o cenário descrito aponta para o bitmap.

Alternativa B — ❌ Incorreta

O índice de chave reversa (reverse key index) inverte a ordem dos bytes da chave para distribuir melhor as inserções em tabelas com chaves sequenciais, evitando contenção em ambientes de alta concorrência. Ele não é indicado para colunas de baixa cardinalidade nem para consultas analíticas com COUNT(). É um distrator que remete a técnicas de otimização para escrita, não para leitura analítica.

Alternativa C — ❌ Incorreta

O índice particionado divide o índice em partições menores, geralmente alinhadas às partições da tabela, para facilitar a manutenção e melhorar o desempenho em tabelas muito grandes. Embora seja usado em data warehouses, não é definido pela baixa cardinalidade das colunas, e sim pela estratégia de particionamento. A questão descreve especificamente a característica de "número relativamente baixo de valores", que é a marca do bitmap.

Alternativa D — ❌ Incorreta

O índice de árvore B (B-tree) é o tipo padrão e mais usado, eficiente para consultas por igualdade e por faixa em colunas de alta cardinalidade (ex.: chaves primárias). Em colunas com baixa cardinalidade, a árvore B perde eficiência, pois a seletividade é baixa e o índice acaba sendo pouco útil. Além disso, não é especialmente eficiente para COUNT() em colunas de baixa cardinalidade, ao contrário do bitmap. A banca coloca a árvore B como distrator por ser o tipo mais conhecido, mas o cenário descrito é o oposto do que ela atende bem.

Alternativa E — ✅ Correta ⟵ GABARITO

O índice bitmap é exatamente o tipo descrito: adequado para colunas com baixa cardinalidade (poucos valores distintos), típico de data warehouses com baixa atividade de DML (poucas escritas) e consultas ad hoc (filtros imprevisíveis), sendo eficiente para COUNT() porque as operações de contagem podem ser realizadas diretamente sobre os bitmaps, sem acessar a tabela. Essa é a definição consagrada do índice bitmap, presente na literatura de banco de dados e em materiais de otimização de consultas.

PEGA ESSA DICA!

Para identificar o índice bitmap em provas, procure pelas palavras-chave: baixa cardinalidade, poucos valores distintos, data warehouse, baixa atividade de DML, consultas ad hoc e eficiência em COUNT(). Se a questão mencionar esses elementos, a resposta quase sempre será bitmap. Já a árvore B aparece quando há alta cardinalidade, muitas escritas e consultas por faixa.

Gabarito: letra E

Link permanente: /questoes/fg165192