Lancez explain analyze pour obtenir le vrai plan avec les nombres de lignes et les temps réels, puis regardez le noeud qui consomme le plus de temps et comparez les lignes estimées aux lignes réelles. Un gros écart signifie de mauvaises statistiques, donc le planificateur a choisi la mauvaise jointure ou le mauvais parcours. Cherchez les parcours séquentiels sur les grosses tables, les boucles imbriquées déclenchées par une sous-estimation, et les tris qui débordent sur disque. Corrigez avec un index, des statistiques à jour, ou un prédicat réécrit que l'index peut utiliser.
Pourquoi les recruteurs posent cette question
N'importe quel développeur backend sait ajouter un index ; le recruteur vérifie si vous diagnostiquez avant d'agir. Lire le réel contre l'estimé, repérer un prédicat non sargable, et savoir qu'un parcours séquentiel sur une petite table est très bien, ce sont tous des signes de vrai travail sur base de données. Ça ouvre aussi la question de savoir si vous regardez la charge globale, puisqu'une requête devient rarement lente toute seule.
Comment structurer votre réponse
- Obtenez le vrai plan avec explain analyze, pas seulement explain.
- Trouvez le noeud dominant et comparez lignes estimées et lignes réelles.
- Reliez les motifs courants à leurs causes.
- Vérifiez la correction en remesurant le plan, pas à l'intuition.
Exemple de réponse
Je commence par explain analyze avec buffers pour avoir de vrais temps et de vrais comptages, idéalement sur un volume comparable à la production parce qu'un plan sur un petit jeu de données ne m'apprend rien. Ensuite je trouve le noeud qui consomme le plus de temps et je compare son estimation au réel. S'il estimait une ligne et en a obtenu cinquante mille, le planificateur a choisi une boucle imbriquée qui est maintenant une catastrophe, et la cause profonde est en général des statistiques périmées ou un prédicat corrélé que le planificateur ne sait pas modéliser. Ensuite je cherche les suspects habituels : un parcours séquentiel sur une grosse table, un filtre qui pourrait être une condition d'index, un tri qui déborde sur disque, ou une fonction enveloppant la colonne qui rend l'index inutilisable. C'est ce dernier cas que j'ai eu le plus récemment, un appel à lower sur une colonne e-mail qui ignorait l'index ; un index fonctionnel sur lower de l'e-mail l'a fait passer d'environ 900 millisecondes à deux. Ensuite je rejoue le plan pour confirmer que sa forme a changé, puisqu'une exécution plus rapide sur un cache chaud ne prouve rien.
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 qui empêche un prédicat d'utiliser un index ?
- Comment distinguez-vous un problème de statistiques d'un index manquant ?
- Quand un parcours séquentiel est-il le bon plan ?
Autres questions pour Développeur backend
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