ClickHouse/docs/ru/sql-reference/statements/explain.md
Dmitriy 93bdeeaed1 Update EXPLAIN AST
Добавил поддержку всех запросов.
2021-04-27 19:32:48 +03:00

5.3 KiB
Raw Blame History

toc_priority toc_title
39 EXPLAIN

EXPLAIN

Выводит план выполнения запроса.

Синтаксис:

EXPLAIN [AST | SYNTAX | PLAN | PIPELINE] [setting = value, ...] SELECT ... [FORMAT ...]

Пример:

EXPLAIN SELECT sum(number) FROM numbers(10) UNION ALL SELECT sum(number) FROM numbers(10) ORDER BY sum(number) ASC FORMAT TSV;
Union
  Expression (Projection)
    Expression (Before ORDER BY and SELECT)
      Aggregating
        Expression (Before GROUP BY)
          SettingQuotaAndLimits (Set limits and quota after reading from storage)
            ReadFromStorage (SystemNumbers)
  Expression (Projection)
    MergingSorted (Merge sorted streams for ORDER BY)
      MergeSorting (Merge sorted blocks for ORDER BY)
        PartialSorting (Sort each block for ORDER BY)
          Expression (Before ORDER BY and SELECT)
            Aggregating
              Expression (Before GROUP BY)
                SettingQuotaAndLimits (Set limits and quota after reading from storage)
                  ReadFromStorage (SystemNumbers)

Типы EXPLAIN

  • AST — абстрактное синтаксическое дерево.
  • SYNTAX — текст запроса после оптимизации на уровне AST.
  • PLAN — план выполнения запроса.
  • PIPELINE — конвейер выполнения запроса.

EXPLAIN AST

Дамп AST запроса.

Пример:

EXPLAIN AST SELECT 1;
SelectWithUnionQuery (children 1)
 ExpressionList (children 1)
  SelectQuery (children 1)
   ExpressionList (children 1)
    Literal UInt64_1

Поддерживает все типы запросов, не только SELECT.

Пример:

EXPLAIN AST ALTER TABLE t1 DELETE WHERE date = today();
┌─explain──────────────────────────┐
 AlterQuery  t1 (children 1)      
  ExpressionList (children 1)     
   AlterCommand 27 (children 1)   
    Function equals (children 1)  
     ExpressionList (children 2)  
      Identifier date             
      Function today (children 1) 
       ExpressionList             
└──────────────────────────────────┘

EXPLAIN SYNTAX

Возвращает текст запроса после применения синтаксических оптимизаций.

Пример:

EXPLAIN SYNTAX SELECT * FROM system.numbers AS a, system.numbers AS b, system.numbers AS c;
SELECT
    `--a.number` AS `a.number`,
    `--b.number` AS `b.number`,
    number AS `c.number`
FROM
(
    SELECT
        number AS `--a.number`,
        b.number AS `--b.number`
    FROM system.numbers AS a
    CROSS JOIN system.numbers AS b
) AS `--.s`
CROSS JOIN system.numbers AS c

EXPLAIN PLAN

Дамп шагов выполнения запроса.

Настройки:

  • header — выводит выходной заголовок для шага. По умолчанию: 0.
  • description — выводит описание шага. По умолчанию: 1.
  • actions — выводит подробную информацию о действиях, выполняемых на данном шаге. По умолчанию: 0.

Пример:

EXPLAIN SELECT sum(number) FROM numbers(10) GROUP BY number % 4;
Union
  Expression (Projection)
  Expression (Before ORDER BY and SELECT)
    Aggregating
      Expression (Before GROUP BY)
        SettingQuotaAndLimits (Set limits and quota after reading from storage)
          ReadFromStorage (SystemNumbers)

!!! note "Примечание" Оценка стоимости выполнения шага и запроса не поддерживается.

EXPLAIN PIPELINE

Настройки:

  • header — выводит заголовок для каждого выходного порта. По умолчанию: 0.
  • graph — выводит граф, описанный на языке DOT. По умолчанию: 0.
  • compact — выводит граф в компактном режиме, если включена настройка graph. По умолчанию: 1.
  • indexes — показывает используемые индексы, количество отфильтрованных кусков и гранул для каждого примененного индекса. По умолчанию: 0. Поддерживается для таблиц семейства MergeTree.

Пример:

EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 4;
(Union)
(Expression)
ExpressionTransform
  (Expression)
  ExpressionTransform
    (Aggregating)
    Resize 2  1
      AggregatingTransform × 2
        (Expression)
        ExpressionTransform × 2
          (SettingQuotaAndLimits)
            (ReadFromStorage)
            NumbersMt × 2 0  1

Оригинальная статья