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

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é.

Exemples de résultats

1 Exemples

Visualiser un EXPLAIN ANALYZE PostgreSQL avec divergence de lignes

Seq Scan estimé à 1000 vs 95000 réelles — point chaud de stats périmées avec suggestion d’index.

Execution plan tree with divergence hotspot and index suggestion.
Voir paramètres d'entrée
{ "explainOutput": "[\n {\n \"Plan\": {\n \"Node Type\": \"Seq Scan\",\n \"Relation Name\": \"users\",\n \"Alias\": \"users\",\n \"Filter\": \"((email)::text = '[email protected]')\",\n \"Plan Rows\": 1000,\n \"Plan Width\": 142,\n \"Total Cost\": 1541.00,\n \"Actual Rows\": 95000,\n \"Actual Loops\": 1,\n \"Actual Startup Time\": 0.1,\n \"Actual Total Time\": 12.4\n }\n }\n]", "dialect": "auto", "sql": "SELECT * FROM users WHERE lower(email) = '[email protected]'", "maxDepth": 20 }

Points clés

Catégorie
Développement et Web
Types d’entrée
textarea, select, number
Type de sortie
html
Couverture des échantillons
4
API disponible
Yes

Vue d’ensemble

Le Visualiseur de Plan d’Exécution SQL transforme vos sorties textuelles ou JSON brutes issues de commandes EXPLAIN (PostgreSQL, MySQL, SQLite) en un arbre de coûts interactif et coloré. Il identifie instantanément les goulots d'étranglement de vos requêtes, tels que les scans de table complets ou les écarts de statistiques, et vous propose des suggestions concrètes d'indexation ou de réécriture.

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.

Comment ça marche

  • 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.

Exemples

1. Résolution d'un Seq Scan sur PostgreSQL

Développeur Backend
Contexte
Un développeur constate que la recherche d'utilisateurs par adresse e-mail prend plusieurs secondes en production.
Problème
Identifier pourquoi l'index sur la table `users` n'est pas utilisé lors de la recherche par e-mail.
Comment l’utiliser
Coller la sortie JSON de `EXPLAIN (FORMAT JSON, ANALYZE)` de la requête dans le visualiseur.
Configuration d’exemple
{
  "dialect": "postgresql",
  "sql": "SELECT * FROM users WHERE lower(email) = '[email protected]'"
}
Résultat
L'outil met en évidence un Seq Scan avec un écart de lignes (1000 estimées vs 95000 réelles) et suggère de créer un index fonctionnel sur `lower(email)`.

2. Optimisation d'un tri lourd sur MySQL

Administrateur de Base de Données
Contexte
Une requête de tableau de bord trie les commandes par date de création sans limite de lignes, provoquant des ralentissements.
Problème
Visualiser l'impact du tri et valider la nécessité d'un index ou d'une réécriture de requête.
Comment l’utiliser
Coller la sortie textuelle tabulaire de `EXPLAIN` MySQL contenant les colonnes `type`, `key` et `Extra`.
Configuration d’exemple
{
  "dialect": "mysql",
  "sql": "SELECT * FROM orders ORDER BY created_at"
}
Résultat
L'arbre affiche un avertissement de type "filesort" et recommande d'ajouter un index sur la colonne `created_at` ou d'ajouter une clause `LIMIT`.

Tester avec des échantillons

json, sql, text

Hubs associés

FAQ

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.

Documentation de l'API

Point de terminaison de la requête

POST /fr/api/tools/sql-explain-plan-visualizer

Paramètres de la requête

Nom du paramètre Type Requis Description
explainOutput textarea Oui -
dialect select Non -
sql textarea Non -
maxDepth number Non -

Format de réponse

{
  "result": "
Processed HTML content
", "error": "Error message (optional)", "message": "Notification message (optional)", "metadata": { "key": "value" } }
HTML: HTML

Documentation de MCP

Ajoutez cet outil à votre configuration de serveur MCP:

{
  "mcpServers": {
    "elysiatools-sql-explain-plan-visualizer": {
      "name": "sql-explain-plan-visualizer",
      "description": "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",
      "baseUrl": "https://elysiatools.com/mcp/sse?toolId=sql-explain-plan-visualizer",
      "command": "",
      "args": [],
      "env": {},
      "isActive": true,
      "type": "sse"
    }
  }
}

Vous pouvez chaîner plusieurs outils, par ex.: `https://elysiatools.com/mcp/sse?toolId=png-to-webp,jpg-to-webp,gif-to-webp`, max 20 outils.

Si vous rencontrez des problèmes, veuillez nous contacter à [email protected]