Перейти до вмісту

Форматер плану EXPLAIN для SQL

Перетворіть результати EXPLAIN або EXPLAIN ANALYZE на читабельне дерево операцій з виділенням повільних частин.

Введення
Вихід

Форматер плану EXPLAIN для SQL

Вставте сирий вивід EXPLAIN або EXPLAIN ANALYZE, і цей інструмент перетворює стіну тексту в дерево операцій з відступами, з витратами, кількістю рядків та часом кожного вузла вишикувані поруч. Замість сканування щільного блоку анотацій "cost=… rows=… actual time=…" ви отримаєте форму, яку можна прочитати з першого погляду — який скан живить яке з'єднання і де запит насправді витрачає свій час.

Виберіть діалект, який відповідає вашій БД: PostgreSQL і MySQL EXPLAIN ANALYZE використовують одне й те саме дерево з відступами "-> ", класичний (не-ANALYZE) EXPLAIN MySQL аналізується рядок за рядком, а SQLite EXPLAIN QUERY PLAN отримує власне ASCII-дерево та формати id/parent. Вставляйте простий текст або перемикайте формат входу на JSON для PostgreSQL EXPLAIN (FORMAT JSON) і MySQL EXPLAIN FORMAT=JSON виводу. Перемикання "Показувати рядки" контролює оціночні та фактичні цифри рядків, поріг дорогих операцій контролює, який відсоток від загальної вартості або часу заслуговує вузлу прапорець "дорогий", а "Приховати вузли" дозволяє відсікти гілки з низькою вартістю з довгого плану, щоб викиди виділялися. Перемикайтесь між деревом з відступами та простою вишикуваною таблицею.

Вартість і час, які кожний вузол звітує, є кумулятивними — вони вже включають кожну дитину знизу — тому інструмент віднімає дітей кожного вузла перед ранжуванням чого-небудь, це запобігає тому, що вузол верхнього рівня запиту завжди виглядає як "дорогий". Лінія резюме під планом підраховує операції, рахує кількість позначених і називає найповільнішу гілку від кореня до листя, тому ви знаєте точно, який ланцюжок операцій досліджувати в першу чергу.

Все працює локально у вашому браузері — план запиту може розкрити імена таблиць і індексів, які ви б переважно не вставляли в випадкову веб-форму, і ніщо з цього не передається ніде. Скопіюйте форматоване дерево, завантажте його як файл .txt або відправте вихід назад на вхід, щоб відрегулювати поріг і переформатувати.

FAQ

Які формати EXPLAIN це розуміє?
Вивід дерева PostgreSQL і MySQL 8 EXPLAIN ANALYZE, класичний табличний EXPLAIN MySQL, SQLite EXPLAIN QUERY PLAN (як його ASCII-дерево, так і сирі рядки id/parent/detail), плюс формати JSON плану PostgreSQL і MySQL.
Чому вузол верхнього рівня не завжди позначається як дорогий?
Витрати та час, які звітує вузол, вже включають усе, що під ним, тому інструмент порівнює власну частку кожного вузла після вирахування його дочірніх вузлів — це те, що вказує на фактичне вузьке місце замість постійного виділення кореня.
Що станеться, якщо план SQLite не має даних витрат?
SQLite EXPLAIN QUERY PLAN не звітує про витрати або час, тому дерево досі форматується, і резюме говорить про це чесно замість того, щоб вгадувати на основі виділення.
"Приховати вузли нижче" видаляє щось з мого плану?
Ні — це лише опускає низькодохідні рядки з цього представлення. Кореневу операцію завжди залишається видимою, щоб дерево зберігало якір; запустіть знову з нижчим порогом, щоб побачити все ще раз.
Мій план запиту завантажується де-небудь?
Ні. Аналіз та форматування відбуваються повністю у вашому браузері — план та будь-які назви таблиць і індексів у ньому ніколи не залишають вашого пристрою.