Оператор 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, подобная этой:
Результат:
Проверка не является полной, поэтому успешный запрос не гарантирует, что переопределение не вызовет проблем.
