Sur la table order_events, qui compte environ quatre millions de lignes d'événements liés à des commandes en ligne, une requête censée récupérer les 30 derniers jours d'activité pour un customer_id donné s'est mise à bloquer lors d'une intervention tardive. Un index sur customer_id avait été ajouté trois semaines plus tôt, mais EXPLAIN ANALYZE a montré que PostgreSQL exécutait quand même un balayage séquentiel de toute la table, faisant passer le temps d'exécution attendu de 40 millisecondes à environ quatre secondes.
SELECT * FROM order_events
WHERE customer_id = 8842
AND created_at > now() - interval '30 days'
ORDER BY created_at DESC;La cause venait d'un décalage entre l'index et la clause ORDER BY de la requête. L'index ne portait que sur customer_id, ce qui permettait à PostgreSQL de retrouver rapidement les lignes du client, mais l'obligeait ensuite à toutes les charger en mémoire et à les trier selon created_at. Un index composite sur (customer_id, created_at DESC), correspondant exactement au schéma d'accès de la requête, a fait chuter le temps d'exécution à neuf millisecondes.
La même erreur s'était déjà produite sur une application de planification pour le secteur de la santé et sur un outil d'analyse pour un client logistique, toujours parce qu'un index ne couvrait que la clause WHERE sans tenir compte des colonnes de tri, de regroupement ou de jointure. Cela a conduit à une routine en quatre étapes appliquée à chaque requête lente : exécuter EXPLAIN ANALYZE et repérer un Seq Scan sur des tables de plus de quelques milliers de lignes ; examiner les colonnes utilisées dans ORDER BY, GROUP BY et JOIN pour déterminer si un index composite vaut mieux que plusieurs index simples ; vérifier la sélectivité des colonnes, car un champ à faible cardinalité comme un order_status limité à trois valeurs n'apporte guère d'aide seul et doit être combiné à une colonne plus sélective ; et enfin consigner les temps réels en millisecondes mesurés par EXPLAIN ANALYZE avant et après chaque correction plutôt que de se fier à une impression.




Commentaires
Pas encore de commentaire — écris le premier.
Lance la discussion
Pas de compte ni de mot de passe — saisis simplement ton adresse e-mail et nous t’envoyons un lien de connexion à usage unique. Première visite ? Tout se met en place automatiquement.
Ton évaluation sera appliquée automatiquement après ta connexion.
Vérifie ta boîte mail
Nous avons envoyé un lien de connexion à …. Ouvre-le sur cet appareil — cet onglet te connectera automatiquement.
Rien reçu ? Vérifiez le dossier spam — et marquez le message « Non spam » pour qu'il arrive directement la prochaine fois.