Pular para o conteúdo principal

Questão de Banco de Dados — SQL — FGV 2023

Banco de DadosSQL
Código
fg069575
Banca
FGV
Órgão
SEFAZ-MG
Ano
2023
Nível
Superior
Cargo
Auditor Fiscal da Receita Estadual - Tecnologia da Informação (Tarde)
A Linguagem padrão de banco de dados Structured Query Language (SQL) tem como uma de suas principais vantagens a não necessidade de informar exatamente os algoritmos e métodos que devem ser usados para obter os dados do banco de dados. Basta passar a instrução SQL e, assim, o otimizador de consultas irá buscar os melhores algoritmos e métodos para retornar os dados.A sintonia fina ou tuning de consultas consiste em utilizar algumas funções, organizar melhor a instrução SQL na clausula WHERE, por exemplo, para obter o melhor desempenho de uma consulta.Com relação à sintonia fina ao utilizar um banco de dados Oracle, assinale V para a afirmativa verdadeira e F para a falsa.( ) Quando possível, é melhor o uso do UNION ALL em vez de UNION devido ao fato de o UNION ter um processo de remoção de linhas duplicadas.( ) Quando possível, é melhor utilizar IN em vez de EXISTS, visto que EXISTS verifica apenas que os valores existem e o IN verifica valores reais.( ) Quando possível, é melhor utilizar EXISTS, que verifica a existência de linhas retornadas por uma subconsulta em vez de DISTINCT, que recupera todas as linhas para em seguida suprimir as duplicadas.( ) Quando possível, é melhor utilizar variáveis BIND nas instruções SQL, uma vez que o software de banco de dados coloca as consultas SQL em cache para fazer reuso.As afirmativas são, respectivamente,
  1. AV – V – F – F.
  2. BF – V – F – V.
  3. CF – F – V – V.
  4. DV – F – V – F.
  5. EV – F – F – V.
Revelar gabarito e comentário

GabaritoD — V – F – V – F.

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”.

SQL Tuning no Oracle: UNION, IN/EXISTS, DISTINCT/EXISTS, Bind Variables

Gabarito: letra D — sequência V, F, V, F. A primeira e a terceira afirmações são verdadeiras; a segunda e a quarta são falsas. O conhecimento central está nas diferenças de desempenho entre operadores SQL e boas práticas de tuning no Oracle, especialmente a preferência por UNION ALL (evita remoção de duplicatas), EXISTS sobre IN (para subconsultas) e EXISTS sobre DISTINCT (evita recuperação total), além do uso de bind variables para reuso de planos.

A questão aborda recomendações de sintonia fina de consultas no Oracle. Vamos analisar cada afirmativa:

Afirmativa

V/F

Justificativa

1. UNION ALL é melhor que UNION

V

UNION executa remoção de duplicatas (custo de ordenação/hash); UNION ALL apenas concatena, sendo mais eficiente quando duplicatas são toleradas ou inexistentes.

2. IN é melhor que EXISTS

F

Na maioria dos casos, EXISTS é mais eficiente que IN, pois interrompe a busca ao encontrar o primeiro registro correspondente, enquanto IN pode avaliar todos os valores da subconsulta.

3. EXISTS é melhor que DISTINCT

V

EXISTS verifica existência e para na primeira correspondência; DISTINCT recupera todas as linhas e depois elimina duplicatas, com maior custo.

4. (Afirmativa não fornecida na íntegra)

F

A quarta afirmativa é falsa conforme o gabarito (sequência V-F-V-F).

Afirmativa 1 — ✅ Verdadeira

Quando possível, é melhor o uso do UNION ALL em vez de UNION devido ao fato de o UNION ter um processo de remoção de linhas duplicadas.

UNION executa uma operação de remoção de duplicatas (geralmente ordenação ou hash), que consome CPU e memória. UNION ALL apenas concatena os resultados, sem verificar duplicatas. Portanto, se a aplicação pode tolerar duplicatas ou já garante que não existem, UNION ALL é mais eficiente.

Afirmativa 2 — ❌ Falsa

Quando possível, é melhor utilizar IN em vez de EXISTS, visto que EXISTS verifica apenas que os valores existem e o IN verifica valores reais.

A afirmação inverte a recomendação: na maioria dos casos, EXISTS é mais eficiente que IN, especialmente com subconsultas correlacionadas, pois o EXISTS interrompe a busca assim que encontra o primeiro registro correspondente, enquanto o IN pode avaliar todos os valores da subconsulta antes de prosseguir. O argumento apresentado está equivocado.

Afirmativa 3 — ✅ Verdadeira

Quando possível, é melhor utilizar EXISTS, que verifica a existência de linhas retornadas por uma subconsulta em vez de DISTINCT, que recupera todas as linhas para em seguida suprimir as duplicadas.

Quando o objetivo é apenas verificar se existe ao menos uma linha que satisfaça uma condição, EXISTS é mais performático que DISTINCT, pois o primeiro para ao encontrar a primeira correspondência, enquanto o DISTINCT precisa recuperar todas as linhas e depois eliminar duplicatas (o que pode envolver ordenação).

Afirmativa 4 — ❌ Falsa

Quando possível, é melhor utilizar variáveis BIND nas instruções SQL, uma vez que o software de banco de dados coloca as consultas SQL em cache para fazer reuso.

Embora o uso de bind variables seja recomendado para promover o reuso de planos de execução (soft parse), a justificativa apresentada é considerada imprecisa: o banco de dados não armazena em cache as consultas SQL em si, mas sim o plano de execução associado a um SQL text com bind variables. Além disso, a frase "coloca as consultas SQL em cache" pode induzir ao entendimento de que o texto literal é mantido, o que não é o principal benefício. Por esse motivo, a banca considerou a afirmativa falsa.


Agora, avaliando cada alternativa:

Alternativa A — ❌ Incorreta

Sequência V-V-F-F. Erro: a segunda afirmativa deveria ser F (não V) e a quarta deveria ser F (não V).

Alternativa B — ❌ Incorreta

Sequência F-V-F-V. Erro: a primeira deveria ser V (não F), a terceira deveria ser V (não F) e a quarta deveria ser F.

Alternativa C — ❌ Incorreta

Sequência F-F-V-V. Erro: a primeira deveria ser V (não F), a quarta deveria ser F (não V).

Alternativa D — ✅ Correta ⟵ GABARITO

Sequência V-F-V-F. Corresponde exatamente ao julgamento correto das afirmativas.

Alternativa E — ❌ Incorreta

Sequência V-F-F-V. Erro: a terceira deveria ser V (não F).

PEGA ESSA DICA!

Para questões de tuning SQL, decore as preferências: UNION ALL > UNION (se duplicatas não são problema), EXISTS > IN (em subconsultas), EXISTS > DISTINCT (para existência), e o uso de bind variables para reuso de planos (embora a banca tenha considerado a justificativa como falsa, é uma prática recomendada). Revise sempre o motivo por trás de cada recomendação.

Gabarito: letra D — V, F, V, F.

Link permanente: /questoes/fg069575