# Visualiseur de Plan d’Exécution SQL

Collez la sortie EXPLAIN / EXPLAIN ANALYZE (PostgreSQL/MySQL/SQLite) pour obtenir un arbre des coûts, repérer les écarts lignes estimées/réelles et des suggestions d’index

> Page canonique: https://elysiatools.com/fr/tools/sql-explain-plan-visualizer

- **Catégorie:** Development

- **Mots-clés:** explain, sql, plan, index, base de données

## Présentation

Cet outil analyse la véritable sortie EXPLAIN — pas le texte SQL statique — et restitue le plan d’exécution sous forme d’arbre indenté, coloré par sévérité.

Entrées prises en charge (auto-détectées ou sélectionnables) :
- PostgreSQL : JSON de `EXPLAIN (FORMAT JSON, ANALYZE)`, ou la sortie TEXT indentée par défaut.
- MySQL : sortie `EXPLAIN FORMAT=JSON`, ou le EXPLAIN tabulaire classique (id|select_type|table|type|key|rows|Extra).
- SQLite : texte de `EXPLAIN QUERY PLAN` (SCAN/SEARCH ... USING INDEX ...).

Chaque nœud affiche : type, relation, index utilisé, coût/temps estimés, lignes estimées et — avec EXPLAIN ANALYZE — lignes et temps réels. Les divergences ≥10× entre lignes estimées et réelles sont signalées comme points chauds de statistiques.

Les diagnostics couvrent : sequential/full table scans sur de grandes tables, divergences de statistiques (ANALYZE périmé), filesorts, tables temporaires, nested loops coûteux, prédicats non sargables (fonctions sur colonnes indexées), SELECT *, ORDER BY sans LIMIT — chacun avec une suggestion concrète d’index ou de réécriture (ex. « ajoutez un index sur users(email) »).

Astuce : pour une sortie maximale, lancez `EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)` sous PostgreSQL ou `EXPLAIN ANALYZE` sous MySQL pour comparer estimations et réalité.

## Entrées

- **Sortie EXPLAIN** (textarea): Paste EXPLAIN JSON or TEXT here. e.g. PostgreSQL: \[ { "Plan": { "Node Type": "Seq Scan", "Relation Name": "users", "Actual Rows": 95000, "Plan Rows": 1000 } } \] Or indented text: Seq Scan on users (cost=0.00..1541.00 rows=1000 width=4)
- **Dialecte** (select)
- **Requête SQL (optionnel)** (textarea): SELECT * FROM users WHERE lower(email) = 'a@b.com' ORDER BY created_at
- **Limite de profondeur** (number)

## Quand l'utiliser

- Lors de l'optimisation de requêtes SQL lentes s'exécutant sur PostgreSQL, MySQL ou SQLite.
- Pour identifier les écarts importants entre les lignes estimées par le planificateur et les lignes réellement lues lors d'un EXPLAIN ANALYZE.
- Pour détecter rapidement les scans séquentiels (Seq Scan) ou les tris sur disque (filesort) nécessitant la création d'index.

## Fonctionnement

- Collez la sortie brute de votre commande EXPLAIN ou EXPLAIN ANALYZE (au format JSON ou texte brut) dans le champ dédié.
- Sélectionnez le dialecte de votre base de données (PostgreSQL, MySQL, SQLite) ou laissez l'outil le détecter automatiquement.
- Ajustez éventuellement la profondeur maximale de l'arbre et ajoutez la requête SQL d'origine pour affiner le diagnostic.
- Analysez l'arbre généré pour repérer les nœuds critiques colorés et appliquez les suggestions d'indexation recommandées.

## Cas d'usage

- Analyse des performances d'une requête de rapport mensuel lente sur PostgreSQL en comparant les coûts estimés et réels.
- Identification de la nécessité d'un index composite sur MySQL suite à la détection d'un filesort ou d'une table temporaire.
- Résolution des problèmes de lenteur sur une base de données SQLite embarquée en analysant le plan de recherche d'index.

## Questions fréquentes

### Quels moteurs de bases de données sont pris en charge ?

L'outil prend en charge PostgreSQL (JSON et texte), MySQL (JSON et tabulaire classique) et SQLite (EXPLAIN QUERY PLAN).

### Comment l'outil détecte-t-il les problèmes de statistiques obsolètes ?

Il compare les lignes estimées et les lignes réelles de la sortie ANALYZE et signale tout écart supérieur ou égal à un facteur 10.

### Faut-il obligatoirement fournir la requête SQL d'origine ?

Non, la requête SQL est optionnelle, l'analyse repose principalement sur la structure de la sortie EXPLAIN fournie.

### Qu'est-ce qu'un prédicat non sargable détecté par l'outil ?

C'est une condition (comme une fonction appliquée sur une colonne) qui empêche le moteur de base de données d'utiliser efficacement un index existant.

### Mes données de plan d'exécution sont-elles envoyées à un serveur tiers ?

Non, l'analyse et la visualisation de votre plan d'exécution SQL sont traitées localement dans votre navigateur pour garantir la confidentialité de vos données.

## Outils associés

- [Visionneuse de sauvegardes de jeu](https://elysiatools.com/fr/tools/game-save-viewer): Déposez n’importe quel fichier de sauvegarde — NBT Minecraft, GVAS Unreal Engine, conteneurs Palworld, saves texte JSON/XML/INI/Lua, profils SQLite — et obtenez le format détecté, les versions du moteur, les champs de progression clés et un arbre structurel borné.
- [Planificateur de migration CSV vers base de donnees](https://elysiatools.com/fr/tools/csv-to-database-migration-planner): Infere un schema relationnel a partir dun CSV et genere CREATE TABLE et ALTER pour PostgreSQL, MySQL, SQLite ou SQL Server
- [Analyseur de logs structures](https://elysiatools.com/fr/tools/structured-log-analyzer): Detecte les formats de logs courants, extrait les champs principaux et exporte en JSON, CSV ou SQL.
- [Auditeur de dépendances package.json](https://elysiatools.com/fr/tools/package-json-dependency-auditor): Audite un package.json pour l’hygiène des dépendances et la qualité des plages de versions, et peut inspecter l’arbre transitif depuis package-lock.json ou yarn.lock. Signale les doublons, wildcard/pré-version, clés non triées, métadonnées manquantes et dépendances runtime/dev mal classées.
- [Analyseur de prevision et de saisonnalite](https://elysiatools.com/fr/tools/time-series-forecast-seasonality-analyzer): Projette des periodes futures a partir de donnees CSV ou JSON et affiche tendance, saisonnalite et residus
- [GraphQL Playground](https://elysiatools.com/fr/tools/graphql-playground): Client GraphQL dans le navigateur : écrivez des requêtes et variables, envoyez-les à tout endpoint GraphQL et inspectez les résultats JSON formatés ou les tableaux d’erreurs — idéal pour itérer sur les schémas pendant le développement
- [Detecteur de conflits de prefixes et abreviations pour mock data](https://elysiatools.com/fr/tools/mock-data-naming-conflict-detector): Detecte des noms de champs visuellement confus et des collisions de prefixe dans des CSV, JSON ou schemas
- [Constructeur de pipeline texte](https://elysiatools.com/fr/tools/text-pipeline-builder): Exécute une recette portable de nettoyage et affiche chaque diff, durée et variation de caractères.

## Exemples

- [Exemples de Scripts SQL](https://elysiatools.com/fr/samples/sql-samples): Exemples de requêtes SQL et scripts de base de données pour divers scénarios et cas d'usage
- [Exemples d'Injections SQL](https://elysiatools.com/fr/samples/sql-injections): Collection éducative de payloads d'injection SQL pour les tests de sécurité, l'évaluation des vulnérabilités et les pratiques de codage défensif
- [Echantillons SQL](https://elysiatools.com/fr/samples/sql-viewer-samples): Fichiers d exemple pour la visionneuse SQL dans le navigateur
- [Exemples Avancés PostgreSQL](https://elysiatools.com/fr/samples/postgresql-advanced): Exemples avancés de base de données PostgreSQL incluant stratégies d'optimisation, requêtes complexes, indexation et réglage de performance

## Contenu associé

- [Revue de requetes SQL pour performance et integrite](https://elysiatools.com/fr/hubs/sql-query-review-performance-and-integrity): Construisez, formatez et controlez le SQL avec logique de jointure, preuves de performance, plans d'execution, injection, cles et schema.
