> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Guía para usar y configurar la función de caché de condiciones de consulta en ClickHouse

# Caché de condiciones de consulta

<Note>
  La caché de condiciones de consulta solo funciona cuando [enable\_analyzer](/es/reference/settings/session-settings#enable_analyzer) está establecido en true, que es el valor predeterminado.
</Note>

Muchas cargas de trabajo reales implican consultas repetidas sobre los mismos datos o casi los mismos (por ejemplo, datos ya existentes más datos nuevos).
ClickHouse proporciona varias técnicas de optimización para este tipo de patrones de consulta.
Una posibilidad es ajustar la organización física de los datos mediante estructuras de índice (p. ej., índices de clave primaria, índices de omisión, proyecciones) o precálculo (vistas materializadas).
Otra posibilidad es usar la [caché de consultas](/es/concepts/features/performance/caches/query-cache) de ClickHouse para evitar evaluar repetidamente las consultas.
La desventaja del primer enfoque es que requiere intervención manual y supervisión por parte de un administrador de bases de datos.
El segundo enfoque puede devolver resultados desactualizados (ya que la caché de consultas no es consistente a nivel transaccional), lo cual puede o no ser aceptable según el caso de uso.

La caché de condiciones de consulta ofrece una solución elegante para ambos problemas.
Se basa en la idea de que evaluar una condición de filtro (p. ej., `WHERE col = 'xyz'`) sobre los mismos datos siempre devolverá los mismos resultados.
Más concretamente, la caché de condiciones de consulta recuerda, para cada filtro evaluado y cada gránulo (= un bloque de 8192 filas de forma predeterminada), si ninguna fila del gránulo satisface la condición de filtro.
La información se registra como un único bit: un bit 0 representa que ninguna fila coincide con el filtro, mientras que un bit 1 significa que existe al menos una fila coincidente.
En el primer caso, ClickHouse puede omitir el gránulo correspondiente durante la evaluación del filtro; en el segundo, el gránulo debe cargarse y evaluarse.

La caché de condiciones de consulta es eficaz si se cumplen tres requisitos previos:

* En primer lugar, la carga de trabajo debe evaluar repetidamente las mismas condiciones de filtro. Esto ocurre de forma natural si una consulta se repite varias veces, pero también puede suceder si dos consultas comparten los mismos filtros, p. ej. `SELECT product FROM products WHERE quality > 3` y `SELECT vendor, count() FROM products WHERE quality > 3`.
* En segundo lugar, la mayor parte de los datos es inmutable, es decir, no cambia entre consultas. En general, este es el caso en ClickHouse, ya que las partes son inmutables y solo se crean mediante INSERTs.
* En tercer lugar, los filtros son selectivos, es decir, solo relativamente pocas filas satisfacen la condición de filtro. Cuantas menos filas coincidan con la condición de filtro, más gránulos se registrarán con el bit 0 (sin filas coincidentes) y más datos podrán descartarse en evaluaciones posteriores del filtro.

<div id="memory-consumption">
  ## Consumo de memoria
</div>

Dado que la caché de condiciones de consulta almacena solo un bit por condición de filtro y gránulo, consume muy poca memoria.
El tamaño máximo de la caché de condiciones de consulta se puede configurar mediante el ajuste del servidor [`query_condition_cache_size`](/es/reference/settings/server-settings/settings#query_condition_cache_size) (valor predeterminado: 100 MB).
Un tamaño de caché de 100 MB corresponde a 100 \* 1024 \* 1024 \* 8 = 838,860,800 entradas.
Dado que cada entrada representa una marca (8192 filas de forma predeterminada), la caché puede abarcar hasta 6,871,947,673,600 (6,8 billones) de filas de una sola columna.
En la práctica, los filtros suelen evaluarse sobre más de una columna, por lo que ese número debe dividirse por la cantidad de columnas filtradas.

<div id="configuration-settings-and-usage">
  ## Configuración y uso
</div>

La configuración [use\_query\_condition\_cache](/es/reference/settings/session-settings#use_query_condition_cache) controla si una consulta concreta o todas las consultas de la sesión actual deben utilizar la caché de condiciones de consulta.

Por ejemplo, la primera ejecución de la consulta

```sql theme={null}
SELECT col1, col2
FROM table
WHERE col1 = 'x'
SETTINGS use_query_condition_cache = true;
```

almacenará los rangos de la tabla que no cumplan el predicado.
Las ejecuciones posteriores de la misma consulta, también con el parámetro `use_query_condition_cache = true`, utilizarán la caché de condiciones de consulta para escanear menos datos.

<div id="administration">
  ## Administración
</div>

La caché de condiciones de consulta no se conserva entre reinicios de ClickHouse.

Para vaciar la caché de condiciones de consulta, ejecute [`SYSTEM CLEAR QUERY CONDITION CACHE`](/es/reference/statements/system#drop-query-condition-cache).

El contenido de la caché se muestra en la tabla del sistema [system.query\_condition\_cache](/es/reference/system-tables/query_condition_cache).
Para calcular el tamaño actual de la caché de condiciones de consulta en MB, ejecute `SELECT formatReadableSize(sum(entry_size)) FROM system.query_condition_cache`.
Si desea examinar condiciones de filtro individuales, puede consultar el campo `condition` en `system.query_condition_cache`. Tenga en cuenta que este campo solo está disponible en compilaciones de depuración.

El número de aciertos y fallos de la caché de condiciones de consulta desde el inicio de la base de datos se muestra como los eventos "QueryConditionCacheHits" y "QueryConditionCacheMisses" en la tabla del sistema [system.events](/es/reference/system-tables/events).
Ambos contadores solo se actualizan para consultas `SELECT` que se ejecutan con la configuración `use_query_condition_cache = true`; otras consultas no afectan a "QueryCacheMisses".

<div id="related-content">
  ## Contenido relacionado
</div>

* Blog: [Presentamos la caché de condiciones de consulta](https://clickhouse.com/blog/introducing-the-clickhouse-query-condition-cache)
* [Predicate Caching: Query-Driven Secondary Indexing for Cloud Data Warehouses (Schmidt et. al., 2024)](https://doi.org/10.1145/3626246.3653395)
