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,
AV – V – F – F.
BF – V – F – V.
CF – F – V – V.
DV – F – V – F.
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.