Skip to main content
Skip to main content

EXPLAIN

Выводит план выполнения запроса.

Синтаксис:

Пример:

Типы EXPLAIN

  • AST — абстрактное синтаксическое дерево.
  • SYNTAX — текст запроса после оптимизации на уровне AST.
  • PLAN — план выполнения запроса.
  • PIPELINE — конвейер выполнения запроса.

EXPLAIN AST

Дамп AST запроса. Поддерживает все типы запросов, не только SELECT.

Примеры:

EXPLAIN SYNTAX

Возвращает текст запроса после применения синтаксических оптимизаций.

Пример:

EXPLAIN PLAN

Дамп шагов выполнения запроса.

Настройки:

  • header — выводит выходной заголовок для шага. По умолчанию: 0.
  • description — выводит описание шага. По умолчанию: 1.
  • indexes — показывает используемые индексы, количество отфильтрованных кусков и гранул для каждого примененного индекса. По умолчанию: 0. Поддерживается для таблиц семейства MergeTree.
  • actions — выводит подробную информацию о действиях, выполняемых на данном шаге. По умолчанию: 0.
  • json — выводит шаги выполнения запроса в виде строки в формате JSON. По умолчанию: 0. Чтобы избежать ненужного экранирования, рекомендуется использовать формат TSVRaw.

Пример:

Примечание

Оценка стоимости выполнения шага и запроса не поддерживается.

При json = 1 шаги выполнения запроса выводятся в формате JSON. Каждый узел — это словарь, в котором всегда есть ключи Node Type и Plans. Node Type — это строка с именем шага. Plans — это массив с описаниями дочерних шагов. Другие дополнительные ключи могут быть добавлены в зависимости от типа узла и настроек.

Пример:

При description = 1 к шагу добавляется ключ Description:

При header = 1 к шагу добавляется ключ Header в виде массива столбцов.

Пример:

При indexes = 1 добавляется ключ Indexes. Он содержит массив используемых индексов. Каждый индекс описывается как строка в формате JSON с ключом Type (MinMax, Partition, PrimaryKey или Skip) и дополнительные ключи:

  • Name — имя индекса (на данный момент используется только для индекса Skip).
  • Keys — массив столбцов, используемых индексом.
  • Condition — строка с используемым условием.
  • Description — индекс (на данный момент используется только для индекса Skip).
  • Parts — количество кусков до/после применения индекса.
  • Granules — количество гранул до/после применения индекса.

Пример:

При actions = 1 добавляются ключи, зависящие от типа шага.

Пример:

EXPLAIN PIPELINE

Настройки:

  • header — выводит заголовок для каждого выходного порта. По умолчанию: 0.
  • graph — выводит граф, описанный на языке DOT. По умолчанию: 0.
  • compact — выводит граф в компактном режиме, если включена настройка graph. По умолчанию: 1.

Пример:

EXPLAIN ESTIMATE

Отображает оценки числа строк, засечек и кусков, которые будут прочитаны при выполнении запроса. Применяется для таблиц семейства MergeTree.

Пример

Создадим таблицу:

Запрос:

Результат: