Use uma CTE quando a legibilidade importa ou quando o mesmo resultado intermediário é referenciado mais de uma vez, já que ela dá nome a uma etapa em vez de aninhá-la. Subqueries servem bem para um filtro pequeno e pontual. A performance é praticamente equivalente na maioria dos motores modernos, embora alguns materializem CTEs e outros as incorporem ao plano, então uma CTE não é automaticamente mais rápida nem mais lenta que a query aninhada equivalente.
Por que os entrevistadores perguntam isso
Isso é em parte uma pergunta de técnica e em parte um teste de mito, porque muitos candidatos afirmam com confiança que CTEs são mais rápidas ou que elas sempre materializam. Os entrevistadores querem a resposta honesta de que o benefício principal é legibilidade e reuso, mais a consciência de que os motores planejam isso de formas diferentes, e de que CTEs recursivas resolvem problemas de hierarquia que uma subquery simples não resolve.
Como estruturar sua resposta
- Comece por legibilidade e reuso como os motivos reais.
- Corrija o mito de que CTEs são inerentemente mais rápidas.
- Aponte as diferenças de materialização entre motores.
- Cite as CTEs recursivas para hierarquias.
- Diga quando uma subquery simples é de fato a melhor escolha.
Exemplo de resposta
Na maioria das vezes por legibilidade e reuso. Se uma query tem quatro etapas lógicas, quatro CTEs nomeadas se leem como um parágrafo e quem revisa consegue acompanhar o raciocínio, enquanto três níveis de subqueries aninhadas significam começar pelo meio e ir abrindo para fora. O outro motivo real é referenciar o mesmo conjunto intermediário duas vezes sem repeti-lo. O que eu não afirmaria é que CTEs são mais rápidas. Esse mito está em todo lugar. Dependendo do motor e da versão, uma CTE pode ser incorporada ao plano ou materializada uma vez, e qualquer uma das duas pode ser a opção mais rápida conforme quantas vezes ela é referenciada e quão seletiva ela é. No Postgres anterior à versão 12, CTEs eram uma barreira de otimização, o que às vezes as deixava dramaticamente mais lentas, então eu olho o plano quando performance realmente importa. Onde a CTE é insubstituível é na recursão: percorrer uma hierarquia de gestores ou uma árvore de categorias é direto com uma CTE recursiva e genuinamente desconfortável sem uma.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- O que é uma CTE recursiva e para que você a usaria?
- Como você verificaria se uma CTE está prejudicando o plano da sua query?
- Quando uma tabela temporária seria melhor que uma CTE?
Mais perguntas para Analista de Dados
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas