Pular para o conteúdo principal

Questão de Banco de Dados — Índices — FGV 2025

Banco de DadosÍndices
Código
fg106578
Banca
FGV
Órgão
CGE-SP
Ano
2025
Nível
Superior
Cargo
Auditor Estadual de Controle - Tecnologia da Informação - tarde
No SQL Server, uma das práticas recomendadas para otimizar o desempenho de consultas complexas, é o uso de índices compostos. Considere a seguinte situação:Uma tabela de vendas (Vendas) contém as colunas data_venda, id_cliente, valor_total. Deseja-se otimizar a consulta que filtra registros por id_cliente e ordena por data_venda.Assinale a opção que indica a configuração de índice mais adequada.
  1. AÍndice apenas em valor_total.
  2. BÍndice apenas em data_venda.
  3. CÍndice composto em (data_venda, id_cliente).
  4. DÍndice composto em (id_cliente, data_venda).
  5. EÍndice filtrado em valor_total com condição valor_total > 1000.
Revelar gabarito e comentário

GabaritoD — Índice composto em (id_cliente, data_venda).

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 compostos no SQL Server: ordem das colunas é crucial

Gabarito: letra D. O índice composto mais adequado é (id_cliente, data_venda). Isso porque a consulta filtra por id_cliente (WHERE) e ordena por data_venda (ORDER BY). Em um índice composto, a primeira coluna deve ser a que aparece no filtro de igualdade, e a segunda coluna auxilia na ordenação. Essa estrutura permite que o índice seja usado para ambas as operações sem necessidade de acesso aleatório à tabela.

A questão testa o princípio de que, em índices compostos, a ordem das colunas define a utilidade. Colocar data_venda primeiro (alternativa C) tornaria o índice útil apenas para ordenação, mas não para o filtro específico por id_cliente, exceto se o filtro também fosse por data_venda.

Alternativa

Colunas do índice

Tipo de índice

Adequação para a consulta (WHERE id_cliente, ORDER BY data_venda)

Motivo

A

valor_total

Simples

❌ Irrelevante

A consulta não filtra por valor_total.

B

data_venda

Simples

❌ Parcial

Ajuda na ordenação, mas não acelera a filtragem por id_cliente.

C

(data_venda, id_cliente)

Composto

❌ Inadequado

A primeira coluna (data_venda) não é usada no filtro; o índice não será eficiente para localizar o cliente.

D

(id_cliente, data_venda)

Composto

Correta (Gabarito)

A primeira coluna atende ao filtro de igualdade; a segunda já está ordenada dentro de cada cliente, atendendo ao ORDER BY.

E

valor_total (filtrado: > 1000)

Filtrado

❌ Irrelevante

A consulta não filtra por valor_total.

Alternativa A — ❌ Incorreta

Índice apenas em valor_total é irrelevante para a consulta, que não filtra por valor_total.

Alternativa B — ❌ Incorreta

Índice apenas em data_venda ajuda na ordenação, mas não acelera a filtragem por id_cliente. O banco precisaria varrer toda a tabela ou índice para encontrar os registros do cliente.

Alternativa C — ❌ Incorreta

Índice composto em (data_venda, id_cliente): a primeira coluna é data_venda. Como a consulta filtra por id_cliente (não por data_venda), o índice não será usado para o filtro – apenas para a ordenação, e ainda assim de forma limitada (só se houver poucos registros por data). A ordem correta para essa consulta é coluna de filtro primeiro.

Alternativa D — ✅ Correta ⟵ GABARITO

Índice composto em (id_cliente, data_venda). A primeira coluna atende a condição WHERE id_cliente = ?; a segunda coluna já está ordenada dentro de cada grupo de id_cliente, satisfazendo a ORDER BY data_venda. Isso permite que o índice seja varrido na ordem correta, sem necessidade de ordenação extra.

Alternativa E — ❌ Incorreta

Índice filtrado em valor_total com condição valor_total > 1000 é irrelevante para a consulta, que não menciona valor_total.

NÃO CAIA NESSA!

A armadilha está em achar que inverter a ordem das colunas não faz diferença. Muitos escolhem (data_venda, id_cliente) pensando que a ordenação é o principal, mas na verdade o filtro define a primeira coluna. Lembre-se: em um índice composto, a coluna de igualdade (WHERE) vem primeiro; a coluna de ordenação (ORDER BY) vem em segundo lugar.

Gabarito: letra D.

Link permanente: /questoes/fg106578