Saltar al contenido principal
Una pregunta habitual entre los usuarios es cuándo deben usar vistas materializadas frente a proyecciones. En este artículo exploraremos las principales diferencias entre ambas y por qué puede convenir elegir una u otra en determinados escenarios.

Resumen de las diferencias clave

La siguiente tabla resume las diferencias clave entre las vistas materializadas y las proyecciones en varios aspectos importantes.

Comparación entre vistas materializadas y proyecciones

Cuándo elegir vistas materializadas

Debería considerar el uso de vistas materializadas cuando:
  • Trabaja con ETL en tiempo real y canalización de datos multietapa: necesita realizar transformaciones complejas, agregaciones o enrutar datos a medida que llegan, incluso a través de varias etapas mediante el encadenamiento de vistas.
  • Requiere desnormalización compleja: necesita unir de antemano datos de varias fuentes (tablas, subconsultas o diccionarios) en una sola tabla optimizada para consultas, especialmente si resultan aceptables las actualizaciones completas periódicas mediante vistas materializadas actualizables.
  • Quiere control explícito del esquema: necesita una tabla de destino independiente y diferenciada, con su propio esquema y engine para los resultados precalculados, lo que ofrece mayor flexibilidad para el modelado de datos.
  • Quiere filtrar durante la ingestión: necesita filtrar los datos antes de materializarlos, reduciendo el volumen de datos escrito en la tabla de destino.

Cuándo evitar las vistas materializadas

Conviene evitar el uso de vistas materializadas cuando:
  • Los datos de origen se actualizan o eliminan con frecuencia: Sin estrategias adicionales para mantener la consistencia entre las tablas de origen y de destino, las vistas materializadas incrementales pueden quedar desactualizadas y perder consistencia.
  • Se prefiere la simplicidad y la optimización automática: Si quieres evitar tener que gestionar tablas de destino independientes.

Cuándo elegir proyecciones

Deberías considerar el uso de proyecciones cuando:
  • Optimizar consultas para una sola tabla: tu objetivo principal es acelerar las consultas en una única tabla base mediante órdenes de clasificación alternativas, optimizando filtros en columnas que no forman parte de la clave primaria o precalculando agregaciones para una sola tabla.
  • Quieres transparencia en las consultas: quieres que las consultas se ejecuten sobre la tabla original sin modificaciones, dejando que ClickHouse elija la mejor disposición de los datos para una consulta determinada.

Cuándo evitar las proyecciones

Conviene evitar el uso de proyecciones cuando:
  • Se requieren transformaciones de datos complejas o ETL de varias etapas: Las definiciones de proyecciones no admiten operaciones JOIN, no pueden encadenarse para crear canalizaciones de varios pasos y no permiten algunas funcionalidades de SQL, como las funciones de ventana o las sentencias CASE complejas. Aunque las consultas sobre tablas con proyecciones pueden usar joins sin restricciones, las proyecciones en sí no son adecuadas para transformaciones de datos complejas.
  • Se necesita filtrar explícitamente los datos materializados: Las proyecciones no admiten cláusulas WHERE en su definición para filtrar los datos que se materializan en la propia proyección.
  • Se usan motores de tabla que no pertenecen a la familia MergeTree: Las proyecciones solo están disponibles para tablas que usan la familia de motores MergeTree.
  • Las consultas FINAL son esenciales: Las proyecciones no funcionan con consultas FINAL, que a veces se usan para la deduplicación.
  • Necesitas réplicas paralelas, ya que no son compatibles con las proyecciones.

Resumen

Las vistas materializadas y las proyecciones son dos herramientas muy potentes para optimizar consultas y transformar datos y, en general, recomendamos no plantear su uso como una elección excluyente. En su lugar, pueden utilizarse de forma complementaria para sacar el máximo partido a sus consultas. Por tanto, la elección entre vistas materializadas y proyecciones en ClickHouse depende realmente de su caso de uso específico y de sus patrones de acceso. Como regla general, debería plantearse usar vistas materializadas cuando necesite agregar datos de una o más tablas de origen en una tabla de destino o realizar transformaciones complejas a gran escala. Las vistas materializadas son excelentes para trasladar el trabajo de agregaciones costosas del tiempo de consulta al tiempo de inserción. Son una gran opción para rollups diarios o mensuales, dashboards en tiempo real o resúmenes de datos. Por otro lado, debería usar proyecciones cuando necesite optimizar consultas que filtran por columnas distintas de las que se usan en la clave primaria de la tabla, que determina el orden físico de los datos en disco. Son especialmente útiles cuando ya no es posible cambiar la clave primaria de una tabla, o cuando sus patrones de acceso son más diversos de lo que la clave primaria puede abarcar.
Última modificación el 12 de junio de 2026