Перейти к основному содержимому
Перейти к основному содержимому

Оператор EXPLAIN

Показывает план выполнения запроса.

Синтаксис:

Пример:

Типы EXPLAIN

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

EXPLAIN AST

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

Примеры:

EXPLAIN SYNTAX

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

Пример:

EXPLAIN QUERY TREE

Настройки:

  • run_passes — Запускает все проходы дерева запроса перед выводом дерева запроса. По умолчанию: 1.
  • dump_passes — Выводит информацию о использованных проходах перед выводом дерева запроса. По умолчанию: 0.
  • passes — Указывает, сколько проходов нужно выполнить. Если задано -1, выполняет все проходы. По умолчанию: -1.

Пример:

EXPLAIN PLAN

Выводит шаги плана запроса.

Настройки:

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

Когда json=1, имена шагов будут содержать дополнительный суффикс с уникальным идентификатором шага.

Пример:

примечание

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

Когда 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.

Когда compact=0 и graph=1, имена процессоров будут содержать дополнительный суффикс с уникальным идентификатором процессора.

Пример:

EXPLAIN ESTIMATE

Показывает оценочное количество строк, меток и частей, которые необходимо прочитать из таблиц при обработке запроса. Работает с таблицами в семействе MergeTree.

Пример

Создание таблицы:

Запрос:

Результат:

EXPLAIN TABLE OVERRIDE

Показывает результат переопределения таблицы в схеме таблицы, доступной через табличную функцию. Также выполняет некоторые проверки и выбрасывает исключение, если переопределение может привести к какой-либо ошибке.

Пример

Предположим, у вас есть удаленная таблица MySQL, такая как эта:

Результат:

примечание

Проверка не завершена, поэтому успешный запрос не гарантирует, что переопределение не вызовет проблем.