Utilisez une CTE quand la lisibilité compte, ou quand le même résultat intermédiaire est référencé plusieurs fois, puisqu'elle nomme une étape au lieu de l'imbriquer. Les sous-requêtes conviennent très bien pour un petit filtre en ligne isolé. Les performances sont à peu près équivalentes sur la plupart des moteurs modernes, même si certains matérialisent les CTE et d'autres les inlinent, donc une CTE n'est pas automatiquement plus rapide ou plus lente que la requête imbriquée équivalente.
Pourquoi les recruteurs posent cette question
C'est en partie une question de savoir-faire et en partie un test de mythe, parce que beaucoup de candidats affirment avec aplomb que les CTE sont plus rapides, ou qu'elles sont toujours matérialisées. Les recruteurs veulent la réponse honnête : le vrai bénéfice, c'est la lisibilité et la réutilisation, plus la conscience que les moteurs les planifient différemment, et que les CTE récursives résolvent des problèmes de hiérarchie qu'une simple sous-requête ne peut pas traiter.
Comment structurer votre réponse
- Commencez par la lisibilité et la réutilisation comme vraies raisons.
- Corrigez le mythe selon lequel les CTE seraient intrinsèquement plus rapides.
- Notez les différences de matérialisation selon les moteurs.
- Mentionnez les CTE récursives pour les hiérarchies.
- Dites quand une simple sous-requête est vraiment le meilleur choix.
Exemple de réponse
Surtout pour la lisibilité et la réutilisation. Si une requête a quatre étapes logiques, quatre CTE nommées se lisent comme un paragraphe et un relecteur peut suivre le raisonnement, alors que trois niveaux de sous-requêtes imbriquées obligent à commencer au milieu et à remonter vers l'extérieur. L'autre vraie raison, c'est de référencer deux fois le même ensemble intermédiaire sans le répéter. Ce que je n'irais pas prétendre, c'est que les CTE sont plus rapides. Ce mythe est partout. Selon le moteur et la version, une CTE peut être inlinée dans le plan ou matérialisée une fois, et l'un ou l'autre peut être le plus rapide selon le nombre de références et la sélectivité. Sur Postgres avant la version 12, les CTE étaient une barrière d'optimisation, ce qui les rendait parfois nettement plus lentes, donc je regarde le plan quand la performance compte vraiment. Là où une CTE est irremplaçable, c'est la récursivité : parcourir une hiérarchie de managers ou un arbre de catégories est simple avec une CTE récursive, et franchement pénible sans.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Qu'est-ce qu'une CTE récursive et à quoi l'utiliseriez-vous ?
- Comment vérifieriez-vous si une CTE nuit à votre plan de requête ?
- Quand une table temporaire serait-elle meilleure qu'une CTE ?
Autres questions pour Analyste de données
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions