# Ejemplo - EXPLAIN ANALYZE

Al ejecutar el comando EXPLAIN ANALYZE, obtendrás un resultado detallado que muestra cómo se procesa internamente tu consulta.

**Tipo de cursor**

<table><thead><tr><th width="142">Campo</th><th>Descripción</th></tr></thead><tbody><tr><td>cursor_ref</td><td>Número de cursores de referencia utilizados. Se emplean para accesos directos a series de datos sin filtros complejos.</td></tr><tr><td>cursor_aux</td><td>Número de cursores auxiliares empleados. Se utilizan para leer bloques de datos cuando hay múltiples series o agregaciones.</td></tr><tr><td>cursor_cond</td><td>Número de cursores condicionales usados. Se aplican cuando existen filtros o condiciones complejas en la consulta.</td></tr></tbody></table>

A continuación te muestro un ejemplo representativo de lo que verías al analizar una consulta:

* Consulta

{% code title="text" overflow="wrap" %}

```sql
EXPLAIN ANALYZE SELECT * FROM "ambiente" WHERE "sensor_id" = 'sensor01'
```

{% endcode %}

Resultado

{% code title="text" overflow="wrap" %}

```
name,tags,EXPLAIN ANALYZE
,,.
,,└── select
,,"    ├── execution_time: 13.462712ms"
,,"    ├── planning_time: 921.871µs"
,,"    ├── total_time: 14.384583ms"
,,"    ├── create_iterator"
,,"    │   ├── labels"
,,"    │   │   ├── cond: sensor_id::tag = 'sensor01'"
,,"    │   │   ├── measurement: ambiente"
,,"    │   │   └── shard_id: 37"
,,"    │   ├── cursors_ref: 0"
,,"    │   ├── cursors_aux: 9"
,,"    │   ├── cursors_cond: 0"
,,"    │   ├── float_blocks_decoded: 9"
,,"    │   ├── float_blocks_size_bytes: 5993"
,,"    │   ├── integer_blocks_decoded: 0"
,,"    │   ├── integer_blocks_size_bytes: 0"
,,"    │   ├── unsigned_blocks_decoded: 0"
,,"    │   ├── unsigned_blocks_size_bytes: 0"
,,"    │   ├── string_blocks_decoded: 0"
,,"    │   ├── string_blocks_size_bytes: 0"
,,"    │   ├── boolean_blocks_decoded: 0"
,,"    │   ├── boolean_blocks_size_bytes: 0"
,,"    │   └── planning_time: 282.315µs"
,,"    └── create_iterator"
,,"        ├── labels"
,,"        │   ├── cond: sensor_id::tag = 'sensor01'"
,,"        │   ├── measurement: ambiente"
,,"        │   └── shard_id: 38"
,,"        ├── cursors_ref: 0"
,,"        ├── cursors_aux: 9"
,,"        ├── cursors_cond: 0"
,,"        ├── float_blocks_decoded: 45"
,,"        ├── float_blocks_size_bytes: 202224"
,,"        ├── integer_blocks_decoded: 0"
,,"        ├── integer_blocks_size_bytes: 0"
,,"        ├── unsigned_blocks_decoded: 0"
,,"        ├── unsigned_blocks_size_bytes: 0"
,,"        ├── string_blocks_decoded: 0"
,,"        ├── string_blocks_size_bytes: 0"
,,"        ├── boolean_blocks_decoded: 0"
,,"        ├── boolean_blocks_size_bytes: 0"
,,"        └── planning_time: 268.459µs"
```

{% endcode %}

En este resultado podemos observar:

**name, tags, EXPLAIN ANALYZE**\
Encabezado de la tabla de resultados. Aquí, EXPLAIN ANALYZE es la columna que contiene el plan y las métricas de ejecución.

**└── select**\
Indica el inicio del plan de ejecución para la operación principal SELECT.

* **execution\_time: 13.462712ms**\
  Tiempo total que tardó en ejecutarse la consulta (excluyendo la planificación).
* **planning\_time: 921.871µs**\
  Tiempo dedicado a planificar la consulta antes de ejecutarla (en microsegundos).
* **total\_time: 14.384583ms**\
  Tiempo total sumando planificación y ejecución.

***

**├── create\_iterator**\
Representa la creación de un iterador para recorrer los datos de un shard específico. En este caso, hay dos, uno por cada shard.

* **labels**
  * **cond: sensor\_id::tag = 'sensor01'**\
    Condición aplicada a los datos: solo se consideran los registros donde el tag sensor\_id es igual a 'sensor01'.
  * **measurement: ambiente**\
    Nombre de la medición (tabla) sobre la que se ejecuta la consulta.
  * **shard\_id: 37 / 38**\
    Identificador del shard de la base de datos sobre el que se está iterando.
* **cursors\_ref: 0**\
  Número de cursores de referencia utilizados (en este caso, ninguno).
* **cursors\_aux: 9**\
  Número de cursores auxiliares utilizados para leer bloques de datos.
* **cursors\_cond: 0**\
  Número de cursores condicionales usados (ninguno en este caso).
* **float\_blocks\_decoded: 9 / 45**\
  Número de bloques de datos de tipo float decodificados en cada shard.
* **float\_blocks\_size\_bytes: 5993 / 202224**\
  Tamaño total en bytes de los bloques float decodificados en cada shard.
* **integer\_blocks\_decoded / integer\_blocks\_size\_bytes**\
  Número y tamaño de bloques de enteros decodificados (0, porque no hay datos de tipo entero en esta consulta).
* **unsigned\_blocks\_decoded / unsigned\_blocks\_size\_bytes**\
  Número y tamaño de bloques de enteros sin signo decodificados (0).
* **string\_blocks\_decoded / string\_blocks\_size\_bytes**\
  Número y tamaño de bloques de cadenas decodificados (0).
* **boolean\_blocks\_decoded / boolean\_blocks\_size\_bytes**\
  Número y tamaño de bloques booleanos decodificados (0).
* **planning\_time: 282.315µs / 268.459µs**\
  Tiempo dedicado a planificar la lectura de cada shard (en microsegundos).

***

**Resumen:**

* Los campos execution\_time, planning\_time y total\_time te indican el rendimiento global de la consulta.
* Los bloques decodificados y su tamaño muestran el volumen de datos leídos por tipo.
* Los labels y shard\_id te indican sobre qué fragmentos y bajo qué condiciones se han leído los datos.
* Los cursores reflejan cómo se accede internamente a los datos.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://darioaplicano.gitbook.io/influxdb2.x/sesion-4/guion-de-la-sesion/documentacion/consultas-avanzadas-y-optimizacion/explain-analyze/ejemplo-explain-analyze.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
