Questão nº 78
Questão de Tecnologia da Informação · FGV CGE-SP 2025 (nº 78)
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.
- AÍndice apenas em valor_total.
- BÍndice apenas em data_venda.
- CÍndice composto em (data_venda, id_cliente).
- DÍndice composto em (id_cliente, data_venda). (alternativa correta)
- EÍndice filtrado em valor_total com condição valor_total > 1000.
Resposta comentada
Gabarito Alternativa D
Um índice composto é uma estrutura que organiza os dados de uma tabela com base em múltiplas colunas, como um catálogo telefônico com sobrenome e depois nome. A ordem das colunas no índice é crucial, pois define como o banco de dados busca e ordena as informações.
- (A) Incorreta: Um índice apenas em valor_total não otimiza a busca por id_cliente nem a ordenação por data_venda, pois essas colunas não estão no índice.
- (B) Incorreta: Um índice apenas em data_venda otimizaria a ordenação, mas não a filtragem por id_cliente, que ainda exigiria uma varredura para encontrar os clientes desejados.
- (C) Incorreta: Esta é a armadilha da banca. Um índice composto em (data_venda, id_cliente) não é o ideal porque a consulta filtra por id_cliente. Para usar o índice de forma eficiente, a coluna da cláusula
WHERE(o filtro) deve vir primeiro. Se data_venda vem primeiro, o banco de dados teria que percorrer o índice por todas as datas para encontrar os registros do id_cliente específico, perdendo a eficiência do filtro. - (D) Correta: Um índice composto em (id_cliente, data_venda) é o mais adequado. Ele permite que o banco de dados localize rapidamente os registros para um id_cliente específico (primeira coluna do índice) e, dentro desses registros, os dados já estarão pré-ordenados por data_venda (segunda coluna do índice). Isso otimiza tanto a cláusula
WHEREquanto aORDER BYsimultaneamente. - (E) Incorreta: Um índice filtrado em valor_total com uma condição específica não tem relação com a otimização da consulta que filtra por id_cliente e ordena por data_venda.
Fonte: FGV CGE-SP 2025 Auditor Estadual de Controle - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.