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