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.
Пример
Создадим таблицу:
Запрос:
Результат: