Todos los productos
Search
Centro de documentos

PolarDB:Fully refreshing a materialized view

Última actualización: Sep 23, 2026

Una vista materializada es un objeto de base de datos que optimiza las consultas complejas. Para lograrlo, calcula y almacena los resultados previamente. Al guardar estos datos, usted consulta directamente la información precalculada. Esto evita volver a ejecutar operaciones que consumen muchos recursos y acelera las consultas, ya que intercambia espacio de almacenamiento por tiempo de ejecución.

Las vistas materializadas en los clústeres de PolarDB for MySQL admiten la actualización completa. Se pueden usar métodos de actualización programados o manuales. Estas vistas utilizan un mecanismo de tareas en segundo plano para actualizarse. Usted puede combinarlas con un IMCI para acelerar las consultas, lo cual mejora la eficiencia de las tareas de actualización y reduce la carga en los nodos de solo lectura. Esta función se basa en la arquitectura HTAP de PolarDB y amplía aún más las capacidades de procesamiento analítico (AP).image.png

Una vista materializada se diferencia de una vista normal porque contiene una copia física de los datos que usted consulta directamente. Está formada por la vista misma y su tabla base física subyacente.

  • Create a materialized view: crear la vista y materializar los datos son dos pasos independientes. La materialización es una operación asíncrona que se envía a una tarea en segundo plano para llenar la tabla base física. El nombre de esta tabla se asocia con la vista. Las tareas de materialización y actualización incluyen operaciones de consulta e inserción. La operación de consulta se descarga a un nodo de solo lectura con un IMCI para acelerar las consultas y reducir el impacto en el nodo principal.

  • Query a materialized view: las consultas sobre una vista materializada se ejecutan contra su tabla base física subyacente.

  • Refresh a materialized view: el proceso de actualización completa crea una nueva tabla base física oculta. Después de ejecutar la instrucción de actualización en la tabla oculta, el sistema intercambia la tabla base original con la oculta. Esta acción actualiza la tabla de metadatos con la información de la tabla base física más reciente y la sincroniza con la estructura en memoria para las consultas.

  • Task monitoring and management: consulte la cola de tareas de actualización en segundo plano para ver los detalles de cada tarea. También puede monitorear y gestionar las tareas; por ejemplo, pause o reinicie las actualizaciones programadas de una vista materializada a nivel de tabla, de base de datos o global.

Requisitos

Su clúster de PolarDB for MySQL debe cumplir uno de los siguientes requisitos:

  • MySQL 8.0.1, con una versión secundaria del motor 8.0.1.1.51 o posterior.

  • MySQL 8.0.2, con una versión secundaria del motor 8.0.2.2.31 o posterior.

Beneficios

  • Evita cálculos repetidos: en consultas complejas que consumen muchos recursos, los resultados se calculan una sola vez y se reutilizan varias veces. Esto mejora significativamente la eficiencia de las consultas.

  • Preagregación de datos: preagregue los datos para informes diarios, semanales y mensuales. Así acelera la generación de informes y el análisis de datos.

  • Consultas optimizadas en conjuntos de datos grandes: reduce los escaneos directos sobre grandes volúmenes de datos sin procesar y acelera los tiempos de respuesta en consultas analíticas.

  • Compatibilidad con análisis multidimensional: precalcule datos agregados para distintas combinaciones de dimensiones. De este modo, obtiene soporte eficiente para OLAP y otros escenarios de análisis multidimensional.

Escenarios de uso

Las vistas materializadas optimizan el rendimiento de las consultas al calcular y almacenar previamente los resultados. Son especialmente útiles para procesar datos a gran escala y consultas complejas. Reducen la sobrecarga de los cálculos en tiempo real y simplifican la lógica de las consultas, por lo que resultan ideales para generar informes rápidamente y analizar datos.

  • Evitar cálculos repetidos: recomendado cuando necesita almacenar los resultados de cálculos frecuentes que consumen muchos recursos. Al usar vistas materializadas, no tiene que recalcular los mismos datos, lo cual mejora notablemente la eficiencia de las consultas.

  • Preagregación de datos: en la generación de informes y el análisis de datos, estas vistas preagregan información como ventas diarias, semanales o mensuales, además de datos de comportamiento de usuarios. Almacenar previamente los resultados reduce el tiempo y los recursos necesarios para el cálculo en tiempo real.

  • Consultas optimizadas en conjuntos de datos grandes: consultar directamente grandes volúmenes de datos sin procesar consume mucho tiempo debido a los escaneos frecuentes y masivos. Las vistas materializadas reducen la necesidad de acceder a los datos originales, lo que acelera las consultas y el análisis.

  • Compatibilidad con análisis multidimensional: estas vistas precalculan datos agregados para distintas combinaciones de dimensiones. Gracias a ello, ofrecen respuestas rápidas y eficientes en escenarios de análisis de datos multidimensionales.

Parámetros

Los parámetros de un clúster de PolarDB difieren entre la consola y una sesión de base de datos. A continuación se describen las diferencias:

  • En la consola de PolarDB:

    • Compatibilidad: para ser compatibles con los archivos de configuración de MySQL, algunos parámetros del clúster en la consola de PolarDB tienen el prefijo loose_.

    • Procedimiento: busque y modifique los parámetros que tienen el prefijo loose_.

  • En una sesión de base de datos (mediante la línea de comandos o un cliente)

    • Procedimiento: cuando use el comando SET para modificar un parámetro en una sesión de base de datos, quite el prefijo loose_ y utilice el nombre original del parámetro.

Parámetro

Descripción

loose_materialized_view_enabled

Especifica si se habilitan las vistas materializadas. Valores válidos:

  • ON (predeterminado): habilita la función.

  • OFF: deshabilita la función.

loose_enable_materialized_view_parallel

Especifica si se habilita la función de consulta paralela para las vistas materializadas. Valores válidos:

  • ON: habilitada.

  • OFF (predeterminado): deshabilitada.

Crear una vista materializada

Sintaxis

CREATE
  MATERIALIZED VIEW view_name [(column_list)]
  [REFRESH [COMPLETE|FAST]]
  [ON [COMMIT|DEMAND]]
  [START WITH now()] [NEXT now() + interval 1 hour]
  [[DISABLE|ENABLE] QUERY REWRITE]
  [MATERIALIZED OPTIONS = 'json_options']
  AS select_statement

Permisos

  • El permiso CREATE sobre la base de datos donde se encuentra la vista materializada.

  • El permiso SELECT sobre las columnas correspondientes (o sobre toda la tabla) de todas las tablas base de la vista materializada.

Parámetros

Parámetro

Obligatorio

Descripción

view_name

Sí

El nombre de la vista materializada.

column_list

No

Las columnas que se incluirán en la vista materializada. Para asignar nombres específicos a las columnas de la vista, enumérelas en column_list, separadas por comas (,).

REFRESH

No

Especifica la política de actualización de la vista materializada.

  • COMPLETE (predeterminado): actualización completa.

  • FAST: actualización incremental.

Nota

Este tema describe la política de actualización completa. Para obtener información sobre la política de actualización incremental, consulte Incrementally refresh a materialized view.

ON

No

Especifica el tipo de materialización de la vista materializada.

  • COMMIT: vista materializada en tiempo real.

  • DEMAND (predeterminado): vista materializada asíncrona.

Nota

Actualmente, solo se admite el tipo de vista materializada asíncrona.

START WITH

No

La hora de inicio para la actualización automática de una vista materializada asíncrona.

NEXT

No

El intervalo de actualización de una vista materializada asíncrona.

Nota

Si no especifica NEXT, la vista solo se actualizará de forma manual.

QUERY REWRITE

No

Especifica si la vista materializada admite la reescritura de consultas.

  • DISABLE (predeterminado): no admitida.

  • ENABLE: admitida.

Nota

Actualmente, la reescritura de consultas no es compatible.

MATERIALIZED OPTIONS

No

Especifica los parámetros extendidos de la vista materializada. El valor es una cadena, normalmente un objeto JSON. Para más detalles, consulte mv_options usage.

select_statement

Sí

La instrucción de consulta que define los datos de la vista materializada. Esta instrucción recupera datos de las tablas base y almacena el resultado en la vista materializada.

Uso de mv_options

mv_options se especifica mediante la cláusula MATERIALIZED OPTIONS = 'json_options'. Dicha cláusula debe aparecer antes de AS select_statement, y json_options debe ser un objeto JSON válido.

  • Versiones compatibles:

    • MySQL 8.0.1, versión secundaria del kernel 8.0.1.1.55 o posterior.

    • MySQL 8.0.2, versión secundaria del kernel 8.0.2.2.35 o posterior.

  • mv_options admite los siguientes campos:

    Campo

    Tipo

    Valor

    Descripción

    order_key

    STRING

    Un nombre de columna o un texto de expresión.

    Establece el valor order_key de la tabla contenedora de la vista materializada.

    engine

    STRING

    • InnoDB

    • XEngine

    Especifica el motor de almacenamiento que usa la tabla contenedora de la vista materializada. El valor no distingue entre mayúsculas y minúsculas.

    table_format

    STRING

    • row

    • column

    Especifica el formato de almacenamiento por filas o por columnas de la tabla contenedora. El valor no distingue entre mayúsculas y minúsculas.

    • El motor InnoDB solo admite row.

    • El motor XEngine admite tanto row como column, y suele usarse junto con engine: "xengine".

    refresh_policy

    STRING

    • MASTER

    • PREFER_TPRO

    • PREFER_IMCI

    • FORCE_TPRO

    • FORCE_IMCI

    • COST

    Especifica la política de descarga para la tarea de actualización completa. El valor no distingue entre mayúsculas y minúsculas. Una cadena vacía o un valor desconocido hace que el sistema aplique la política predeterminada definida por la variable del sistema.

    • MASTER: actualiza en el nodo principal.

    • PREFER_TPRO: prefiere actualizar en un nodo de solo lectura (RO) con almacenamiento por filas. Si no existe ningún nodo RO con almacenamiento por filas, actualiza en el nodo principal.

    • PREFER_IMCI: prefiere actualizar en un nodo RO con índice de almacenamiento por columnas. Si no existe ningún nodo RO con índice de almacenamiento por columnas, actualiza en el nodo principal.

    • FORCE_TPRO: fuerza la actualización en un nodo RO con almacenamiento por filas. Devuelve un error si no existe ningún nodo RO con almacenamiento por filas.

    • FORCE_IMCI: fuerza la actualización en un nodo RO con índice de almacenamiento por columnas. Devuelve un error si no existe ningún nodo RO con índice de almacenamiento por columnas.

    • COST: elige entre un nodo RO con almacenamiento por filas y un nodo RO con índice de almacenamiento por columnas según el costo de la consulta para ejecutar la actualización.

    unique_check

    INT

    • 1

    • 0

    Se usa para las tablas contenedoras con almacenamiento por columnas de XEngine.

    • 0 relaja la comprobación de unicidad durante la actualización.

    • 1 u omitir el campo mantiene la comprobación predeterminada.

    Nota

    Por ahora, engine, table_format, refresh_policy y unique_check solo son compatibles con MySQL 8.0.2.

  • Notas:

    • MATERIALIZED OPTIONS = '' se interpreta como si no se hubieran establecido parámetros extendidos.

    • Cuando SHOW CREATE TABLE muestra la definición de la vista materializada, incluye la cláusula MATERIALIZED OPTIONS configurada.

    • La capa de sintaxis solo acepta una cadena. Si el análisis posterior falla, se registra un WARNING y el procesamiento continúa con el comportamiento predeterminado, como si no se hubiera analizado ningún parámetro correspondiente.

  • Ejemplo:

    CREATE MATERIALIZED VIEW mv1
      REFRESH COMPLETE
      ON DEMAND
      START WITH now()
      NEXT now() + INTERVAL 1 hour
      MATERIALIZED OPTIONS = '{"engine":"xengine","table_format":"column","order_key":"col1"}'
      AS SELECT col1, col2 FROM tbl1;

Ejemplo

  1. Cree las tablas table1 y table2 para usarlas como tablas base de la vista materializada.

    -- Create the base tables.
    CREATE TABLE table1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    CREATE TABLE table2 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
    
    -- Insert data into the base tables.
    INSERT INTO table1 VALUES (1, 'A', 100), (2, 'B', 200), (3, 'C', 300), (4, 'D', 400);
    INSERT INTO table2 VALUES (1, 'X', 10), (2, 'Y', 20), (3, 'Z', 30), (5, 'W', 50);
  2. Cree una vista materializada.

    CREATE MATERIALIZED VIEW mv1
    REFRESH COMPLETE
    ON DEMAND
    START WITH now() NEXT now() + INTERVAL 1 hour
    AS
    SELECT
        SUM(t1.col3) AS sum_value,
        AVG(t1.col3) AS avg_value
    FROM table1 t1
    JOIN table2 t2 ON t1.col1 = t2.col1;
  3. Cree una vista materializada con mv_options.

    CREATE MATERIALIZED VIEW mv2
      REFRESH COMPLETE
      ON DEMAND
      START WITH now()
      NEXT now() + INTERVAL 1 hour
      MATERIALIZED OPTIONS = '{"engine":"xengine","table_format":"column","refresh_policy":"FORCE_IMCI"}'
      AS
        SELECT t1.col1, t1.col2, t1.col3
        FROM table1 t1 JOIN table2 t2 ON t1.col1 = t2.col1;

Consultar una vista materializada

Nota

Para consultar una vista materializada, necesita el permiso SELECT sobre la vista. No requiere el permiso SELECT sobre las tablas base subyacentes de la vista.

Consultar una vista materializada

SELECT * FROM mv1;

El resultado esperado es:

+-----------+-----------+
| sum_value | avg_value |
+-----------+-----------+
|       600 |  200.0000 |
+-----------+-----------+

Consultar la definición de la vista

SHOW CREATE VIEW mv1;

El resultado esperado es:

+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View | Create View                                                                                                                                                                                                                                                                    | character_set_client | collation_connection |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| mv1  | CREATE MATERIALIZED VIEW `mv1` REFRESH COMPLETE ON DEMAND START WITH ('2025-10-15 11:20:15') NEXT (now() + interval 1 hour)  AS select sum(`t1`.`col3`) AS `sum_value`,avg(`t1`.`col3`) AS `avg_value` from (`table1` `t1` join `table2` `t2` on((`t1`.`col1` = `t2`.`col1`))) | utf8mb4              | utf8mb4_0900_ai_ci   |
+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+

Consultar desde una tabla del sistema

SELECT * FROM mysql.view_materialized_info;

Descripción de los campos

Campo

Descripción

TABLE_SCHEMA

El nombre de la base de datos donde se encuentra la vista materializada.

TABLE_NAME

El nombre de la vista materializada.

IS_DROPPED

Indica si la vista se eliminó.

  • 0: No

  • 1: Sí

FIRST_REFRESH_TIME

Si se configuró la actualización automática, esta es la hora de la primera actualización.

TIME_ZONE

La configuración de zona horaria.

REFRESH_CONDITION

El mecanismo que activa la actualización.

  • DEMAND: actualización asíncrona, que se activa automáticamente según una programación o de forma manual.

  • COMMIT: actualización en tiempo real.

REFRESH_STRATEGY

La política de actualización de la vista materializada.

  • COMPLETE: actualización completa.

  • FAST: actualización incremental.

REFRESH_START_TIME

La hora de inicio configurada para la primera actualización.

NEXT_TIME_EXPRESSION

La definición de la próxima hora de actualización de una vista materializada asíncrona.

LAST_START_TIME

La hora en la que realmente comenzó la última actualización.

LAST_END_TIME

La hora en la que realmente terminó la última actualización.

CONTAINER_TABLE_POSTFIX

El sufijo de la tabla física utilizada para el almacenamiento de datos.

EXPIRED_TABLE_POSTFIX

El sufijo de la tabla física que contiene los datos caducados después de una actualización.

IS_STOPPED

Indica si la actualización programada está detenida.

  • 0: No

  • 1: Sí

CREATE_TIME

La hora en la que se crearon los metadatos de la vista materializada.

UPDATE_TIME

La hora de la última actualización de los metadatos de la vista materializada.

El resultado esperado es:

+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| id  | table_schema | table_name | is_dropped | first_refresh_time  | time_zone | refresh_condition | refresh_strategy | refresh_start_time  | next_time_expression      | last_start_time     | last_end_time       | container_table_postfix | expired_table_postfix | is_stopped | create_time         | update_time         |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| 471 | testmv       | mv1        |          0 | 2025-10-15 11:20:16 | +08:00    | DEMAND            | COMPLETE         | 2025-10-15 11:20:15 | (now() + interval 1 hour) | 2025-10-15 11:20:15 | 2025-10-15 11:20:16 |           2022929596417 |         2022929596417 |          0 | 2025-10-15 11:20:16 | 2025-10-15 11:20:16 |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+

Actualizar una vista materializada

Actualmente, las vistas materializadas solo admiten la actualización completa. Este proceso utiliza un método fuera de lugar (out-of-place): crea una tabla base física oculta, ejecuta la instrucción de actualización en ella y luego intercambia la tabla base original con la oculta. Por lo tanto, una actualización completa requiere espacio de almacenamiento adicional. Su principal ventaja es que admite cualquier consulta SQL.

Las vistas materializadas admiten dos métodos de actualización: manual y programada.

Actualización manual

Si una vista materializada no está configurada para actualizaciones programadas, o si el intervalo de actualización es muy largo, use el comando REFRESH MATERIALIZED VIEW para actualizar los datos manualmente.

REFRESH MATERIALIZED VIEW <view_name>;

Ejemplo

  1. Inserte nuevos datos de prueba.

    INSERT INTO table1 VALUES (5, 'E', 500), (6, 'F', 600);
    INSERT INTO table2 VALUES (7, 'U', 60), (8, 'V', 70);
  2. Actualice manualmente la vista materializada.

    REFRESH MATERIALIZED VIEW mv1;
  3. Consulte la vista materializada.

    SELECT * FROM mv1;

    El resultado esperado es:

    +-----------+-----------+
    | sum_value | avg_value |
    +-----------+-----------+
    |      1100 |  275.0000 |
    +-----------+-----------+

Actualización programada

Al crear una vista materializada, especifique una hora de inicio para las actualizaciones programadas mediante START WITH y configure un intervalo de actualización automática con NEXT. El sistema programa automáticamente la tarea de actualización según la configuración indicada.

CREATE MATERIALIZED VIEW mv1 
REFRESH COMPLETE 
ON DEMAND 
START WITH now() NEXT now() + INTERVAL 1 hour 
AS 
SELECT 
    SUM(t1.col3) AS sum_value, 
    AVG(t1.col3) AS avg_value 
FROM table1 t1 
JOIN table2 t2 ON t1.col1 = t2.col1;

Eliminar una vista materializada

Nota

Para eliminar una vista materializada, necesita el permiso DROP sobre la base de datos donde se encuentra dicha vista.

Sintaxis

DROP MATERIALIZED VIEW <view_name>;

Ejemplo

DROP MATERIALIZED VIEW mv1;

Monitorear y gestionar tareas

La actualización programada de una vista materializada depende del mecanismo de programación automática del sistema. Es posible que necesite monitorear y gestionar una gran cantidad de tareas programadas. Usted puede pausar o reiniciar las tareas de actualización programadas de una vista materializada a nivel de tabla, de base de datos o global.

Consultar la cola de tareas

Consulte la vista del sistema information_schema.materialized_view_refresh_queue para ver la cola de actualizaciones.

SELECT * FROM information_schema.materialized_view_refresh_queue;

Pausar la cola de tareas

Por tabla

STOP MATERIALIZED VIEW task FOR TABLE mv1;

Por base de datos

STOP MATERIALIZED VIEW task FOR DATABASE mv1;

De forma global

STOP MATERIALIZED VIEW task FOR ALL;

Reiniciar la cola de tareas

Por tabla

RESTART MATERIALIZED VIEW task FOR TABLE mv1;

Por base de datos

RESTART MATERIALIZED VIEW task FOR DATABASE mv1;

De forma global

RESTART MATERIALIZED VIEW task FOR ALL;

Comprobar el estado de pausa o reinicio

Después de ejecutar el comando STOP o RESTART, consulte la columna IS_STOPPED de la tabla mysql.view_materialized_info para confirmar si la operación surtió efecto:

SELECT TABLE_SCHEMA, TABLE_NAME, IS_STOPPED FROM mysql.view_materialized_info;
  • IS_STOPPED=1: La tarea de actualización programada está en pausa.

  • IS_STOPPED=0: La tarea de actualización programada se está ejecutando.

Nota

La columna IS_STOPPED no está disponible en la vista del sistema information_schema.materialized_view_refresh_queue. Utilice mysql.view_materialized_info en su lugar.