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

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, подобная этой:

Результат:

примечание

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