Skip to main content

Optimización de Consultas

El Data Warehouse está construido sobre ClickHouse, una base de datos columnar. Esto significa que las consultas se comportan diferente a una base de datos relacional tradicional. Aquí te explicamos cómo aprovechar la estructura para obtener resultados rápidos.

Principios Clave

1. Siempre filtra por fecha

Todas las tablas de hechos están particionadas por mes (toYYYYMM(created_at)). Filtrar por fecha permite a ClickHouse saltar particiones enteras sin leerlas.

2. No necesitas filtrar por company_id

Tu usuario tiene una política de fila que filtra automáticamente por tu empresa. No necesitas agregar WHERE company_id = ... — se aplica de forma transparente.

3. Selecciona solo las columnas que necesitas

ClickHouse es columnar: solo lee las columnas que mencionas en tu SELECT. Menos columnas = menos datos leídos = más rápido.

4. Usa LIMIT para explorar

Cuando estés explorando datos, usa LIMIT para evitar traer millones de filas:

Estructura Interna de las Tablas

Cada tabla tiene un orden de clasificación (sort key) que determina cómo se organizan los datos en disco. Las consultas que filtran por las primeras columnas del sort key son mucho más eficientes.

Sort Keys por Tabla

company_id es siempre la primera columna del sort key. Como tu usuario tiene un filtro automático por empresa, todas tus consultas aprovechan esta optimización sin que tengas que hacer nada.

Índices Secundarios

Algunas tablas tienen índices adicionales que ayudan a filtrar por columnas que no están en el sort key:

Límites del Sistema

Tu usuario tiene los siguientes límites para proteger la estabilidad del sistema: Si tu consulta excede alguno de estos límites, será cancelada automáticamente. Para evitarlo:
  • Agrega filtros de fecha más estrechos
  • Selecciona menos columnas
  • Usa LIMIT
  • Pre-agrega con GROUP BY en lugar de traer filas individuales

Patrones Comunes

JOIN entre tablas de hechos

Puedes cruzar tablas usando conversation_id o survey_user_id:

JOIN con dimensiones

Nivel de servicio personalizado