Um Tribunal de Justiça identificou degradação de desempenho ...
Considerando o funcionamento de índices compostos baseados em árvores balanceadas (B-Tree), em sistemas gerenciadores de bancos de dados relacionais, assinale a afirmativa correta.
- Gabarito Comentado (1)
- Aulas (3)
- Comentários (3)
- Estatísticas
- Cadernos
- Criar anotações
- Notificar Erro
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: B
Fundamento decisivo: O enunciado trata de índice composto B-Tree em consultas com múltiplos filtros por AND, e a regra decisiva é o aproveitamento do prefixo à esquerda nas colunas iniciais do índice.
- Em índice composto B-Tree, verifique primeiro se a consulta aproveita as colunas iniciais do índice.
- Não exija todas as colunas do índice para admitir seu uso; o ponto é o aproveitamento do prefixo à esquerda.
- Não trate criação de índice como garantia de index scan; a decisão final é do otimizador por custo.
- Não transforme recursos como skip scan em regra geral de projeto; eles não eliminam a importância da ordem das colunas.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
Questão bem complexa... mas sabendo que o índice composto é aquele criado sobre duas ou mais colunas e que a ordem das colunas usada na sua criação do índice define a importância (ou nível de ordenação) delas no processamento da consulta, ficamos com a alternativa B.
A alternativa correta é a B.
A eficiência de um índice composto está diretamente ligada à regra do prefixo à esquerda (leftmost prefix rule). Isso significa que o SGBD processa o índice da esquerda para a direita, e a consulta será otimizada se filtrar pela primeira coluna do índice (ou por uma sequência que comece por ela).
Por que as outras alternativas estão incorretas?
- A: A ordem das colunas na definição do índice é fixa e fundamental para o desempenho. Embora o otimizador possa reordenar os predicados no SQL para tentar casar com o índice, ele não consegue usar um índice de forma eficiente se o "prefixo" (a primeira coluna definida) não estiver presente na consulta.
- C: O índice pode ser utilizado mesmo que apenas as primeiras colunas (o prefixo) sejam referenciadas. Não é obrigatório usar todas as colunas que compõem o índice composto para que ele traga ganho de performance.
- D: Colunas com baixa seletividade (poucos valores distintos, como "Gênero") geralmente não garantem o uso do índice. O otimizador pode preferir um escaneamento sequencial (table scan) por ser mais barato do que ler um índice que retorna uma porcentagem muito alta dos registros da tabela.
- E: O index skip scan é uma técnica de otimização específica para casos onde a coluna inicial do índice é ignorada na consulta, mas ela não torna a ordem das colunas irrelevante nem substitui a necessidade de um bom design de índices para a performance geral.
Resposta: B
Índices compostos baseados em B-Tree são organizados de forma hierárquica e sequencial, seguindo a ordem das colunas conforme definidas na criação do índice. A regra do prefixo à esquerda (leftmost prefix) determina que o índice só pode ser usado eficientemente quando a consulta filtra pelas colunas na mesma ordem (ou por um subconjunto inicial contíguo) em que foram definidas no índice. Assim como um dicionário só é útil se você buscar "pelas primeiras letras" da palavra, não por letras do meio.
Análise das alternativas:
- A. Errada — O otimizador de consultas não reordena magicamente os predicados para forçar o uso ideal do índice; a ordem das colunas na definição do índice importa diretamente para sua eficiência, sendo justamente a regra do leftmost prefix que determina se o índice será aproveitado de forma otimizada ou não.
- B. Correta — Descreve corretamente o funcionamento de índices compostos em B-Tree: a eficiência máxima ocorre quando os predicados da consulta seguem a ordem das colunas do índice, respeitando o prefixo à esquerda (ex.: índice em (A, B, C) é plenamente aproveitado em buscas por A, A+B ou A+B+C, mas não de forma ideal em buscas apenas por B ou C isoladamente).
- C. Errada — Não é obrigatório que todas as colunas do índice composto sejam referenciadas na consulta para que ele seja utilizado; o motor pode aproveitar o índice parcialmente, usando apenas o prefixo inicial das colunas presentes na cláusula WHERE (respeitando a regra do leftmost prefix), mesmo que nem todas as colunas do índice apareçam na consulta.
- D. Errada — A palavra "determinística" é o erro central aqui: mesmo com baixa seletividade (poucos valores distintos, como uma coluna "sexo" com apenas M/F) e índice criado, o otimizador de consultas pode ainda preferir um table scan completo, caso julgue (com base em estatísticas) que o volume de linhas retornadas torna o uso do índice menos eficiente que a leitura sequencial. Não há garantia automática/determinística de troca de estratégia apenas pela existência do índice.
- E. Errada — Técnicas como index skip scan existem justamente para mitigar (não eliminar) a limitação do leftmost prefix em cenários específicos (geralmente quando a coluna líder tem baixa cardinalidade), mas não tornam a ordem das colunas irrelevante de forma geral. A ordem continua sendo um fator crítico de performance na grande maioria dos cenários e SGBDs.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo