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