Pular para o conteúdo principal

Questão de Banco de Dados — Oracle — FGV 2024

Banco de DadosOracle
Código
fg165205
Banca
FGV
Órgão
TJ AP
Ano
2024
Cargo
AJ ( )
João, administrador de Banco de Dados Oracle, deverá criar índices para melhorar o desempenho de consultas complexas sobre processos judiciais.   Para isso, deverá escolher a estrutura que facilita a busca rápida de informações em operações de junção e intervalo, como:   SELECT parte.nome, movimento.descricao, movimento.data FROM parte JOIN movimento ON parte.processoID = movimento.processoID WHERE parte.processoID BETWEEN 10 AND 20;]   Para tanto, João criou um índice específico na coluna “processoID” da tabela “movimento”:   CREATE INDEX idx_movimento_processoID ON movimento(processoID);   Após a execução do script apresentado, o tipo de índice criado por João é:
  1. Abitmap;
  2. Bhashing;
  3. Cespacial;
  4. Dárvore B;
  5. Esequencial.
Revelar gabarito e comentário

GabaritoD — árvore B;

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”.

Índices em Banco de Dados Oracle: B-tree e o comando CREATE INDEX

Gabarito: letra D — o comando CREATE INDEX idx_movimento_processoID ON movimento(processoID); cria, por padrão, um índice do tipo árvore B (B-tree). No Oracle, quando não se especifica o tipo de índice, o padrão é o B-tree, que é a estrutura mais adequada para consultas com operações de junção e intervalo, como o BETWEEN apresentado no enunciado.

O índice é uma estrutura de acesso auxiliar associada a uma tabela, utilizada para agilizar a recuperação de registros em resposta a certas condições de pesquisa. Sem o uso de índices, a busca das informações ocorre de forma sequencial e pode levar muito tempo caso haja uma grande quantidade de linhas a serem percorridas. No Oracle, o tipo de índice padrão, criado quando não se especifica o tipo, é o B-tree, uma estrutura de árvore balanceada que armazena dados classificados e permite pesquisas, acesso sequencial, inserções e remoções de forma eficiente.

A árvore B é uma estrutura de dados em árvore, auto balanceada, que armazena dados classificados e permite pesquisas, acesso sequencial, inserções e remoções no banco de dados. Ela é dita balanceada quando toda página folha tem o mesmo número de páginas intermediárias até a raiz. Essa estrutura é ideal para consultas que envolvem operações de junção (JOIN) e intervalo (BETWEEN), pois os dados são organizados de forma ordenada, permitindo que o otimizador realize um Index Range Scan para recuperar rapidamente os registros dentro de uma faixa de valores.

A consulta do enunciado filtra por parte.processoID BETWEEN 10 AND 20, ou seja, uma busca por intervalo. O índice B-tree é perfeitamente adequado para esse cenário, pois mantém os valores das chaves ordenados, permitindo localizar o início e o fim do intervalo de forma eficiente. Já um índice hash, por exemplo, é ótimo para buscas por igualdade, mas ineficiente para intervalos, pois a função de espalhamento destrói a ordem dos valores.

A pegadinha da questão está em reconhecer que o comando CREATE INDEX sem a cláusula BITMAP cria um índice B-tree. Muitos candidatos podem confundir com o índice bitmap, que é criado com CREATE BITMAP INDEX e é eficiente para colunas com baixa cardinalidade (poucos valores distintos), como 'Gênero' ou 'Estado Civil'. No entanto, para a consulta apresentada, com operação de junção e intervalo, o B-tree é a escolha correta.

Guarde a distinção entre os tipos de índice: o B-tree é o padrão e o mais usado, ideal para consultas por igualdade e intervalo; o bitmap é eficiente para colunas com muitos valores repetidos e é o padrão em bancos multidimensionais; o hash é ótimo para igualdade, mas inútil para faixa; o espacial é usado para dados geográficos; e o sequencial não é um tipo de índice, mas sim uma forma de varredura. É exatamente essa fronteira que separa as alternativas.

Critério

B-tree (padrão)

Bitmap

Hash

Espacial

Comando de criação

CREATE INDEX (sem cláusula)

CREATE BITMAP INDEX

Não criado via CREATE INDEX padrão (usa hash cluster)

CREATE INDEX ... INDEXTYPE IS MDSYS.SPATIAL_INDEX

Ideal para

Igualdade e intervalos (BETWEEN, JOIN)

Colunas de baixa cardinalidade (poucos valores distintos)

Igualdade (=)

Dados geográficos/espaciais

Desempenho em intervalo

Excelente (Index Range Scan)

Ruim (não preserva ordem)

Ineficiente (função hash destrói ordem)

Não aplicável

Aplicação no caso

processoID com BETWEEN 10 AND 20

❌ Alta cardinalidade de processoID

❌ Consulta por intervalo

❌ Coluna numérica, não espacial

Alternativa A — ❌ Incorreta

O índice bitmap é criado com o comando CREATE BITMAP INDEX, e não com CREATE INDEX simples. Ele é eficiente para colunas com baixa cardinalidade (poucos valores distintos), como 'Gênero' ou 'Estado Civil'. No caso da coluna processoID, que provavelmente tem alta cardinalidade (muitos valores distintos), um índice bitmap seria ineficiente, ocupando muito espaço e prejudicando a performance. Além disso, o comando do enunciado não especifica BITMAP, então o índice criado não é desse tipo.

Alternativa B — ❌ Incorreta

O índice hashing (ou hash) é uma estrutura que usa uma função de espalhamento para mapear chaves a posições. Ele é ótimo para buscas por igualdade (=), mas ineficiente para consultas por intervalo (BETWEEN), pois a função hash não preserva a ordem dos valores. No Oracle, o índice hash não é criado com o comando CREATE INDEX padrão; ele é usado em contextos específicos, como em tabelas organizadas por hash (hash cluster). Portanto, não é o tipo de índice criado pelo comando do enunciado.

Alternativa C — ❌ Incorreta

O índice espacial é usado para dados geográficos e espaciais, como coordenadas, pontos, linhas e polígonos. Ele é criado com a cláusula INDEXTYPE IS MDSYS.SPATIAL_INDEX e é específico para consultas espaciais, como 'encontrar todos os pontos dentro de uma área'. A coluna processoID é um identificador numérico, não um dado espacial, então o índice espacial não se aplica a esse caso.

Alternativa D — ✅ Correta ⟵ GABARITO

O comando CREATE INDEX idx_movimento_processoID ON movimento(processoID); cria, por padrão, um índice do tipo árvore B (B-tree). No Oracle, quando não se especifica o tipo de índice, o padrão é o B-tree. Essa estrutura é uma árvore balanceada que armazena os valores das chaves de forma ordenada, permitindo buscas eficientes por igualdade e por intervalo. Para a consulta com JOIN e BETWEEN, o B-tree é a estrutura ideal, pois permite que o otimizador realize um Index Range Scan para recuperar rapidamente os registros dentro da faixa de valores.

Alternativa E — ❌ Incorreta

O índice sequencial não é um tipo de índice em banco de dados. A varredura sequencial (full table scan) é uma forma de acesso aos dados que percorre todas as linhas da tabela, sem usar um índice. O comando CREATE INDEX cria uma estrutura de índice, não uma varredura sequencial. Portanto, essa alternativa não corresponde ao tipo de índice criado.

Gabarito: letra D

Link permanente: /questoes/fg165205