# Estructura de datos para queries eficientes

## Principios de Diseño para Queries Eficientes

| Principio                              | Descripción                                                                                         | Buenas Prácticas                                                                                                   |
| -------------------------------------- | --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| Minimizar la Cardinalidad de Series    | Reducir el número de combinaciones únicas de tags para evitar degradar el rendimiento y el consumo. | <p>- Evitar tags con valores muy variables (IDs únicos).<br>- Usar tags solo para atributos clave de filtrado.</p> |
| Uso Estratégico de Tags y Fields       | Diferenciar entre tags (indexados) y fields (no indexados).                                         | <p>- Tags para atributos filtrados frecuentemente.<br>- Fields para datos numéricos/textuales de análisis.</p>     |
| Buckets y Políticas de Retención       | Separar datos por tipo/persistencia y definir retención automática.                                 | <p>- Buckets para datos crudos y agregados.<br>- Políticas que eliminen datos antiguos según necesidades.</p>      |
| Downsampling y Continuous Queries/Task | Reducir resolución de datos históricos y automatizar agregados.                                     | <p>- Downsampling para evitar consultas sobre grandes volúmenes.<br>- Continuous Queries para datos agregados.</p> |
| Balancear Rango Temporal y Precisión   | Evitar consultas de alta precisión sobre periodos extensos.                                         | <p>- Consultar downsampleados para históricos.<br>- Limitar precisión en rangos largos.</p>                        |
| Indexación y Organización de Datos     | Optimizar el uso de índices y la estructura lógica de measurements.                                 | <p>- Aprovechar índices de tags.<br>- Evitar exceso de tags únicos.<br>- Organizar measurements lógicamente.</p>   |

### ¿A qué se refieren los índices en InfluxDB? <a href="#a-qu-se-refieren-los-ndices-en-influxdb" id="a-qu-se-refieren-los-ndices-en-influxdb"></a>

En InfluxDB, los índices son estructuras internas que permiten acelerar la búsqueda y filtrado de datos, especialmente en consultas sobre grandes volúmenes de series temporales.

InfluxDB crea automáticamente índices sobre:

* Etiquetas (*tags*)
* Columna de tiempo de cada medición.

<figure><img src="/files/9mMcUTAnUWp1A0SygE41" alt="" width="563"><figcaption></figcaption></figure>

Los índices son mecanismos automáticos que permiten acceder y filtrar rápidamente los datos mediante las etiquetas y el tiempo, optimizando el rendimiento de las consultas sobre grandes volúmenes de datos temporales

## Buenas Prácticas Específicas para Consultas en InfluxDB 2.x <a href="#buenas-prcticas-especficas-para-consultas-en-influ" id="buenas-prcticas-especficas-para-consultas-en-influ"></a>

### **Optimización de Consultas Flux**

* **Comienza las consultas con filtros pushdown:** Filtra primero por tiempo y tags para reducir el volumen de datos procesados.
* **Evita ventanas de tiempo muy cortas:** Las funciones de ventana pequeñas pueden generar muchas operaciones y ralentizar las consultas.
  * aggregateWindow(every: 1s, fn: mean): Para un día completo (86400 segundos)
  * aggregateWindow(every: 5m, fn: mean): Para un día completo (288 ventanas de 5min)
  * aggregateWindow(every: 10s, fn: max): Para una semana completa (60,000 intervalos de 10s)
* **Utiliza funciones pesadas con moderación:** Operaciones como `join` o `map` pueden consumir muchos recursos; úsalas solo cuando sea necesario.

## Estrategias Avanzadas de Optimización <a href="#estrategias-avanzadas-de-optimizacin" id="estrategias-avanzadas-de-optimizacin"></a>

* **Particionamiento lógico:** Divide los datos en buckets o measurements según criterios como localización, tipo de sensor o frecuencia de consulta.
* **Monitoreo y ajuste continuo:** Utiliza herramientas de monitoreo para identificar consultas lentas, ajustar la estructura de datos y modificar las políticas de retención según el uso real.


---

# 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/estructura-de-datos-para-queries-eficientes.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.
