← Questões de Banco de Dados

Banco de Dados · FGV · 2023

Questão comentada de Banco de Dados

Select at.customerid, at.tdate from salestransaction at where at.tdate > GETDATE( ) - 10 order by at.tdate desc A instrução SQL acima é executada milhões de vezes por dia em um SGBDR Microsoft SQL Server. Considerando que ‘customerid’ é parte da chave primária e que ‘tdate’ não está indexada e não apresenta valores únicos, assinale o índice a seguir que irá prover uma melhor otimização para essa consulta.

Gabarito: C

A lógica aqui é simples: a consulta filtra por tdate, ordena por tdate desc e ainda precisa retornar customerid. Em SQL Server, o melhor cenário é ter um índice que ajude no predicado WHERE e, ao mesmo tempo, evite leitura extra da tabela para buscar a coluna projetada. Quando você coloca tdate como chave do índice, o SGBD consegue localizar rapidamente os registros dos últimos 10 dias e também já deixá-los na ordem desejada pelo ORDER BY, reduzindo trabalho de ordenação. O detalhe decisivo é o customerid: como ele faz parte da chave primária, muitas vezes já está presente no índice clustered ou na estrutura base da tabela, mas a questão pede a melhor otimização para essa consulta em especial. Um índice não clusterizado em tdate com INCLUDE em customerid torna a consulta coberta, isto é, o SQL Server consegue responder sem ficar indo e voltando à tabela para buscar customerid. Isso reduz I/O e costuma ser exatamente o tipo de ganho que banca adora cobrar. Por que não usar uma chave composta com customerid? Porque customerid não ajuda no filtro nem na ordenação desta consulta; ele só aumenta o tamanho e a complexidade do índice sem benefício real para o acesso. E como tdate não é único, a ideia de UNIQUE INDEX também não combina com o enunciado. Em resumo: você quer um índice enxuto, útil para o filtro, útil para a ordenação e que cubra a coluna retornada. É aí que a alternativa C brilha. Como regra prática em SQL Server, índices cobertos com INCLUDE são muito usados para evitar key lookup e melhorar consultas de leitura recorrente. A doutrina de performance de bancos de dados chama isso de covering index: o índice sozinho resolve a consulta, sem visitas extras aos dados.

Continue treinando

Questões relacionadas