Questão de Banco de Dados — Geral — Quadrix 2026
- Código
- qa433561
- Banca
- Quadrix
- Órgão
- CREFITO 17
- Ano
- 2026
- Cargo
- Ana ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: CERTO (letra C). A criação de um índice sobre a coluna especialidade da tabela Profissional é, de fato, uma medida válida de otimização para acelerar a filtragem realizada na cláusula WHERE (WHERE p.especialidade = 'Fisioterapia'), pois o índice permite ao SGBD localizar rapidamente as linhas que satisfazem a condição, evitando a varredura completa da tabela (full table scan). Essa é uma técnica clássica de tuning de consultas em bancos de dados relacionais.
O índice é uma estrutura auxiliar de dados que acelera a recuperação de registros, funcionando de forma análoga ao índice remissivo de um livro: em vez de percorrer todas as páginas (linhas) para encontrar um termo, você consulta diretamente a localização. No contexto de bancos de dados, um índice sobre a coluna especialidade cria uma estrutura ordenada (geralmente uma árvore B+ ou hash) que mapeia os valores da coluna para as linhas correspondentes. Quando a consulta filtra por especialidade = 'Fisioterapia', o SGBD pode usar esse índice para acessar apenas as linhas que atendem à condição, reduzindo drasticamente o número de operações de I/O e o tempo de resposta.
É importante entender que a otimização de consultas envolve várias estratégias, e a criação de índices é uma das mais comuns. No entanto, nem toda coluna merece um índice: colunas com baixa seletividade (poucos valores distintos, como um campo booleano) podem não se beneficiar, pois o índice retornaria uma grande fração das linhas. No caso da coluna especialidade, se houver muitos profissionais com especialidades diferentes, a seletividade é alta e o índice é eficaz. Além disso, é preciso considerar o custo de manutenção do índice em operações de INSERT, UPDATE e DELETE, mas para uma consulta de relatório diário, o benefício geralmente supera o custo.
Outro ponto relevante é que a cláusula WHERE não é o único lugar onde índices ajudam: eles também aceleram junções (JOIN), ordenações (ORDER BY) e agrupamentos (GROUP BY). No script apresentado, além do filtro por especialidade, há junções entre as tabelas Profissional, Atendimento e Clinica, e um GROUP BY com ORDER BY. Índices nas colunas de junção (p.id, a.id_profissional, a.id_clinica, c.id) e nas colunas de agrupamento/ordenação também poderiam melhorar o desempenho. Contudo, a afirmação do item é específica e correta: o índice sobre especialidade acelera a filtragem do WHERE.
A pegadinha que a banca poderia explorar é a tentação de achar que o índice sobre especialidade não ajudaria porque a consulta também faz junções e agregações. Mas a otimização não precisa resolver todos os gargalos de uma vez; cada índice pode atacar um ponto específico. O item afirma apenas que o índice pode acelerar a filtragem do WHERE, o que é verdadeiro. Portanto, a resposta é CERTO.
A afirmação está correta. A cláusula WHERE p.especialidade = 'Fisioterapia' filtra as linhas da tabela Profissional com base no valor da coluna especialidade. Sem um índice, o SGBD precisaria percorrer todas as linhas da tabela (full table scan) para encontrar as que atendem à condição. Com um índice sobre especialidade, o SGBD pode localizar diretamente as linhas correspondentes, reduzindo o custo de I/O e acelerando a consulta. Essa é uma técnica padrão de otimização de desempenho em bancos de dados relacionais.
Na prova, quando a questão perguntar sobre otimização de consultas, lembre-se dos principais recursos: índices (para acelerar WHERE, JOIN, ORDER BY, GROUP BY), reescrita de consultas (evitar funções em colunas indexadas, usar EXISTS em vez de IN quando apropriado), e análise do plano de execução. Para o WHERE com igualdade, um índice B-tree ou hash é eficaz; para faixas de valores, o B-tree é o mais indicado.
Gabarito: letra C (CERTO).
Link permanente: /questoes/qa433561