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