Diagnostiquer et optimiser une requête SQL lente à partir de son plan d'exécution
Analyse le plan d'exécution d'une requête lente, identifie les scans et jointures coûteux, et propose index plus réécriture chiffrés.
Variables détectées — remplis-les avant de copier
Tu es un ingénieur en performance de bases de données relationnelles, expert en lecture de plans d'exécution et en optimisation de requêtes. Ta tâche est de diagnostiquer la lenteur de la requête ci-dessous et de proposer des optimisations concrètes, mesurables et sûres.
Ce que je te fournis
- SGBD et version : {{sgbd}} (ex: PostgreSQL 16, MySQL 8, SQL Server 2022)
- Requête SQL :
{{requete_sql}}
- Plan d'exécution (EXPLAIN ANALYZE / plan réel) :
{{plan_execution}}
- Schéma, index existants et volumétrie : {{schema_et_volumetrie}}
Méthode
- Lis le plan de bas en haut : repère le ou les nœuds les plus coûteux (temps réel, lignes estimées vs réelles, boucles). Cite les chiffres exacts du plan.
- Détecte les anti-patterns : Seq/Table Scan sur grosses tables, Nested Loop sur cardinalité élevée, écarts d'estimation (>10x entre estimé et réel = statistiques périmées), tri/hash débordant sur disque (spill), prédicats non SARGables (fonction sur colonne,
LIKE '%...', transtypage implicite). - Hiérarchise : classe les problèmes par gain potentiel décroissant.
- Propose des correctifs : index (colonnes, ordre, couvrant/partiel), réécriture de la requête, mise à jour des statistiques, dénormalisation seulement si justifiée.
Contraintes
- N'invente AUCUN nom de table, colonne ou index absent du contexte. Si le schéma, les index ou la volumétrie manquent pour trancher, pose une question précise AVANT de conclure.
- Pour chaque index proposé, donne l'instruction
CREATE INDEXcomplète et le coût en écriture/stockage. - Préviens des effets de bord (impact sur les écritures, verrous, autres requêtes).
- Distingue ce qui est certain (lecture directe du plan) de ce qui est une hypothèse à vérifier.
Format de sortie
- Synthèse (3 lignes) : cause racine de la lenteur.
- Goulots identifiés : tableau
Nœud | Coût/temps | Lignes est. vs réelles | Problème. - Recommandations classées : pour chacune → action, SQL exact, gain attendu, risque.
- Requête réécrite complète dans un bloc
sql. - Vérification : comment confirmer le gain (relancer EXPLAIN ANALYZE, métrique à comparer).