Questão nº 80
Questão de Tecnologia da Informação · FGV CGE-SP 2025 (nº 80)
FGV2025Auditor Estadual de Controle - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Aver comentário ↓
Uma consulta SQL que realiza múltiplos JOINs e filtros sobre tabelas grandes está apresentando lentidão.
As opções a seguir apresentam estratégias recomendadas para otimização, à exceção de uma. Assinale-a.
- ANormalizar ainda mais as tabelas envolvidas. (alternativa correta)
- BUtilizar EXPLAIN para verificar o plano de execução.
- CAvaliar estatísticas e atualizá-las com ANALYZE.
- DCriação de índices nos campos usados em JOIN e WHERE.
- EReescrever a consulta evitando subconsultas desnecessárias.
Resposta comentada
Gabarito Alternativa A
Para otimizar uma consulta SQL lenta, precisamos entender como o banco de dados a executa e identificar os gargalos. As estratégias geralmente envolvem melhorar o plano de execução, o acesso aos dados ou a própria lógica da consulta.
- (A) Correta: Normalizar ainda mais as tabelas envolvidas. A normalização excessiva (ir além do necessário, como 3FN) pode levar à criação de mais tabelas e, consequentemente, exigir mais JOINs para recuperar os dados. Como a consulta já está lenta devido a "múltiplos JOINs", adicionar mais JOINs por meio de normalização adicional provavelmente pioraria o desempenho, em vez de melhorá-lo. Esta é a armadilha: embora a normalização seja um princípio importante de design de banco de dados, "ainda mais" normalização não é uma estratégia de otimização de desempenho para este cenário específico e pode ser contraproducente.
- (B) Incorreta: Utilizar EXPLAIN para verificar o plano de execução. O comando
EXPLAIN(ou similar, dependendo do SGBD) é fundamental para entender como o otimizador do banco de dados planeja executar a consulta, mostrando quais índices serão usados, a ordem dos JOINs e os custos estimados. É o primeiro passo para identificar gargalos. - (C) Incorreta: Avaliar estatísticas e atualizá-las com ANALYZE. As estatísticas do banco de dados (informações sobre a distribuição dos dados nas tabelas) são usadas pelo otimizador para escolher o plano de execução mais eficiente. Estatísticas desatualizadas podem levar a planos ruins.
ANALYZE(ouUPDATE STATISTICS) é essencial para manter as estatísticas precisas. - (D) Incorreta: Criação de índices nos campos usados em JOIN e WHERE. Índices são estruturas que aceleram a busca e a recuperação de dados. Criar índices nas colunas usadas nas cláusulas
JOINeWHERE(filtros) é uma das estratégias mais eficazes para melhorar drasticamente o desempenho de consultas lentas. - (E) Incorreta: Reescrever a consulta evitando subconsultas desnecessárias. Subconsultas, especialmente as correlacionadas ou mal otimizadas, podem ser ineficientes. Reescrever a consulta para usar JOINs, CTEs (Common Table Expressions) ou outras abordagens mais eficientes pode melhorar significativamente o desempenho.
Fonte: FGV CGE-SP 2025 Auditor Estadual de Controle - Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.