# EXPLAIN

Muestra el plan de ejecución de una declaración.

EXPLAIN [AST | SYNTAX | QUERY TREE | PLAN | PIPELINE | ESTIMATE | TABLE OVERRIDE] [setting = value, ...]
    [
      SELECT ... |
      tableFunction(...) [COLUMNS (...)] [ORDER BY ...] [PARTITION BY ...] [PRIMARY KEY] [SAMPLE BY ...] [TTL ...]
    ]
    [FORMAT ...]

Tipos de EXPLAIN

  • AST — Árbol de sintaxis abstracta.
  • SYNTAX — Texto de consulta después de las optimizaciones a nivel de AST.
  • QUERY TREE — Árbol de consulta después de las optimizaciones a nivel de Árbol de Consulta.
  • PLAN — Plan de ejecución de la consulta.
  • PIPELINE — Tubería de ejecución de la consulta.

# EXPLAIN AST

Muestra el AST de la consulta. Admite todo tipo de consultas, no solo SELECT.

Ejemplos:

EXPLAIN AST SELECT 1;
SelectWithUnionQuery (children 1)
 ExpressionList (children 1)
  SelectQuery (children 1)
   ExpressionList (children 1)
    Literal UInt64_1
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 SINTAXIS

Devuelve la consulta después de las optimizaciones de sintaxis.

Ejemplo:

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 ÁRBOL DE CONSULTA

Configuraciones:

  • run_passes — Ejecuta todos los pases del árbol de consulta antes de mostrar el árbol de consulta. Por defecto: 1.
  • dump_passes — Muestra información sobre los pases utilizados antes de mostrar el árbol de consulta. Por defecto: 0.
  • passes — Especifica cuántos pases ejecutar. Si se establece en -1, se ejecutan todos los pases. Por defecto: -1.

Ejemplo:

EXPLAIN QUERY TREE SELECT id, value FROM test_table;
QUERY id: 0
  PROJECTION COLUMNS
    id UInt64
    value String
  PROJECTION
    LIST id: 1, nodes: 2
      COLUMN id: 2, column_name: id, result_type: UInt64, source_id: 3
      COLUMN id: 4, column_name: value, result_type: String, source_id: 3
  JOIN TREE
    TABLE id: 3, table_name: default.test_table

# EXPLAIN PLAN

Muestra los pasos del plan de consulta.

Configuraciones:

  • header — Imprime el encabezado de salida para el paso. Por defecto: 0.
  • description — Imprime la descripción del paso. Por defecto: 1.
  • indexes — Muestra los índices utilizados, el número de partes filtradas y el número de granos filtrados para cada índice aplicado. Por defecto: 0. Compatible con tablas MergeTree.
  • actions — Imprime información detallada sobre las acciones del paso. Por defecto: 0.
  • json — Imprime los pasos del plan de consulta como una fila en formato JSON. Por defecto: 0. Se recomienda utilizar el formato TSVRaw para evitar escapes innecesarios.

Ejemplos:

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)

Cuando json = 1, el plan de consulta se representa en formato JSON. Cada nodo es un diccionario que siempre tiene las claves Tipo de Nodo y Planes. Tipo de Nodo es una cadena con el nombre del paso. Planes es una matriz con descripciones de pasos secundarios. Se pueden agregar otras claves opcionales dependiendo del tipo de nodo y las configuraciones.

Ejemplo:

EXPLAIN json = 1, description = 0 SELECT 1 UNION ALL SELECT 2 FORMAT TSVRaw;
[
  {
    "Plan": {
      "Node Type": "Union",
      "Plans": [
        {
          "Node Type": "Expression",
          "Plans": [
            {
              "Node Type": "SettingQuotaAndLimits",
              "Plans": [
                {
                  "Node Type": "ReadFromStorage"
                }
              ]
            }
          ]
        },
        {
          "Node Type": "Expression",
          "Plans": [
            {
              "Node Type": "SettingQuotaAndLimits",
              "Plans": [
                {
                  "Node Type": "ReadFromStorage"
                }
              ]
            }
          ]
        }
      ]
    }
  }
]

# EXPLAIN TUBERÍA

Configuraciones:

  • header — Imprime el encabezado para cada puerto de salida. Por defecto: 0.
  • graph — Imprime un gráfico descrito en el lenguaje de descripción de gráficos DOT. Por defecto: 0.
  • compact — Imprime el gráfico en modo compacto si la configuración graph está habilitada. Por defecto: 1.

Ejemplo:

EXPLAIN PIPELINE SELECT sum(number) FROM numbers_mt(100000) GROUP BY number % 4;
(Union)
(Expression)
ExpressionTransform
  (Expression)
  ExpressionTransform
    (Aggregating)
    Resize 21
      AggregatingTransform × 2
        (Expression)
        ExpressionTransform × 2
          (SettingQuotaAndLimits)
            (ReadFromStorage)
            NumbersMt × 2 01
Last Updated: Tue May 07 2024 02:28:12 GMT+0000