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