Questão de Banco de Dados — Otimização (Tuning) em Banco de Dados — INSTITUTO AOCP 2023
Banco de Dados›Otimização (Tuning) em Banco de Dados
Código
qa542756
Banca
INSTITUTO AOCP
Órgão
CODEBA
Ano
2023
Cargo
Ana Por ( )
Em relação à otimização de consultas e performance no MySQL, analise as assertivas e assinale a alternativa que aponta as corretas.
I. O MySQL utiliza um otimizador baseado em custo, que escolhe um plano de consulta com base no custo estimado para processar a consulta.
II. No MySQL, a utilização do índice FULLTEXT é adequada para operações comuns de busca em colunas, assim como para operações de busca em texto completo.
III. A função STRAIGHT_JOIN força o MySQL a juntar tabelas na ordem exata em que são listadas na cláusula FROM da consulta.
IV. A otimização de subqueries no MySQL sempre resulta em melhor performance em comparação com consultas equivalentes utilizando JOIN.
AApenas I e III.
BApenas II e IV.
CApenas I e II.
DApenas III e IV.
EI, II, III e IV.
Revelar gabarito e comentário▾
GabaritoA — Apenas I e III.
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”.
Otimização de consultas no MySQL: otimizador, índices e estratégias de junção
Gabarito: letra A — corretos apenas os itens I e III. O MySQL emprega um otimizador baseado em custo (item I) e a função STRAIGHT_JOIN de fato força a ordem de junção das tabelas conforme listadas na cláusula FROM (item III). Os itens II e IV estão incorretos: o índice FULLTEXT não é adequado para buscas comuns em colunas (é específico para texto completo) e a otimização de subqueries não garante performance superior à de um JOIN equivalente — na prática, muitas vezes ocorre o oposto.
A otimização de consultas (tuning) é o processo pelo qual o SGBD escolhe uma estratégia de execução — o chamado plano de consulta — para recuperar os resultados. O objetivo central é minimizar o tempo de resposta e obter ganho de desempenho, mas é importante entender que o termo "otimização" é, na prática, um exagero: o otimizador não garante o plano ótimo absoluto, apenas uma estratégia razoavelmente eficiente. No MySQL, esse processo é conduzido por um otimizador baseado em custo, que estima o custo de diferentes planos de execução (considerando estatísticas como cardinalidade, distribuição de dados, uso de CPU e E/S) e escolhe o mais barato. Isso contrasta com otimizadores puramente baseados em regras heurísticas, que aplicam transformações fixas sem avaliar custos.
Os índices são a ferramenta mais conhecida de otimização. Eles aceleram buscas evitando varreduras completas (full table scan), mas têm custos: pioram a performance de escritas (INSERT, UPDATE, DELETE), consomem espaço extra e exigem manutenção. Existem vários tipos de índice, cada um com finalidade específica. O índice FULLTEXT, por exemplo, é projetado para buscas em texto completo — como encontrar palavras ou frases em grandes volumes de texto — e não para operações comuns de busca em colunas, que são melhor atendidas por índices B-tree ou hash. Usar FULLTEXT para buscas comuns seria inadequado e ineficiente.
A ordem de junção das tabelas é uma decisão crítica para o desempenho. O otimizador normalmente decide a melhor ordem com base em custos, mas o MySQL oferece a função STRAIGHT_JOIN para forçar a junção na ordem exata em que as tabelas aparecem na cláusula FROM. Isso é útil quando o DBA sabe que a ordem escolhida pelo otimizador é subótima. Já a relação entre subqueries e JOIN é um ponto delicado: não há regra absoluta de que subqueries otimizadas sejam sempre melhores. Em muitas versões do MySQL, subqueries correlacionadas podem ser menos eficientes que JOINs equivalentes, e o otimizador frequentemente reescreve subqueries como JOINs internamente. A performance depende do caso concreto, das estatísticas e da versão do SGBD.
A pegadinha desta questão está em dois pontos: (1) associar FULLTEXT a buscas comuns, quando ele é específico para texto completo; e (2) afirmar que subqueries otimizadas são sempre superiores a JOINs, quando a realidade é que a performance varia e muitas vezes o JOIN é mais eficiente. Guarde essas duas distinções — são exatamente elas que separam as alternativas.
Item I — ✅ Correto
O MySQL utiliza um otimizador baseado em custo. Isso é fato: o otimizador estima o custo de diferentes planos de execução (com base em estatísticas como cardinalidade, distribuição de dados, uso de CPU e E/S) e escolhe o plano com menor custo estimado. O item está correto.
Item II — ❌ Incorreto
O índice FULLTEXT é adequado para operações de busca em texto completo, mas não para operações comuns de busca em colunas. Para buscas comuns (igualdade, faixa, prefixo), os índices apropriados são B-tree ou hash. O FULLTEXT é especializado em busca textual (palavras, frases, relevância) e usá-lo para buscas comuns seria inadequado. O erro está em afirmar que ele serve para ambos os casos.
Item III — ✅ Correto
A função STRAIGHT_JOIN força o MySQL a juntar as tabelas na ordem exata em que são listadas na cláusula FROM. Isso é uma funcionalidade documentada do MySQL, usada para sobrepor a decisão do otimizador quando o DBA sabe que a ordem natural é mais eficiente. O item está correto.
Item IV — ❌ Incorreto
A afirmação de que a otimização de subqueries "sempre" resulta em melhor performance que JOINs equivalentes é falsa. Não há garantia de que subqueries sejam sempre superiores; na prática, muitas vezes o JOIN é mais eficiente, especialmente em versões mais antigas do MySQL, onde subqueries correlacionadas eram notoriamente lentas. O otimizador frequentemente reescreve subqueries como JOINs internamente, o que demonstra que não há superioridade inerente. O erro está na palavra "sempre".
Conclusão: corretos apenas os itens I e III, portanto a alternativa correta é a letra A.