Todos os produtos
Search
Central de documentação

PolarDB:Fully refreshing a materialized view

Última atualização: Jun 29, 2026

Uma visualização materializada é um objeto de banco de dados que otimiza consultas complexas ao pré-calcular e armazenar os resultados. Ao manter esses dados, você consulta diretamente as informações pré-calculadas. Isso evita a reexecução de operações que consomem muitos recursos e acelera as consultas, trocando espaço de armazenamento por tempo de resposta.

As visualizações materializadas em clusters PolarDB for MySQL oferecem suporte à atualização completa, tanto por métodos agendados quanto manuais. Um mecanismo de tarefas em segundo plano gerencia essas atualizações. Você pode utilizá-las com um IMCI para acelerar consultas, melhorar a eficiência das tarefas de atualização e reduzir a carga nos nós somente leitura. Baseado na arquitetura HTAP do PolarDB, este recurso aprimora ainda mais as capacidades de processamento analítico (AP).image.png

Diferente de uma visualização comum, a visualização materializada contém uma cópia física dos dados acessíveis diretamente. Ela é composta pela própria visualização e sua tabela base física subjacente.

  • Criar uma visualização materializada: A criação da visualização e a materialização dos dados são etapas distintas. O processo de materialização é uma operação assíncrona enviada como tarefa em segundo plano para popular a tabela base física, cujo nome se associa à visualização. As tarefas de materialização e atualização incluem operações de consulta e inserção. É possível descarregar a consulta para um nó somente leitura com IMCI, acelerando o desempenho e reduzindo o impacto no nó primário.

  • Consultar uma visualização materializada: As consultas em uma visualização materializada são executadas na tabela base física subjacente.

  • Atualizar uma visualização materializada: O processo de atualização completa cria uma nova tabela base física oculta. Após a execução da instrução de atualização na tabela oculta, o sistema alterna entre a tabela base original e a oculta. Essa ação atualiza a tabela de metadados com as informações da tabela base física mais recente e sincroniza a estrutura em memória para consultas.

  • Monitoramento e gerenciamento de tarefas: Consulte a fila de tarefas de atualização em segundo plano para visualizar detalhes. Também é possível monitorar e gerenciar tarefas pausando ou reiniciando atualizações agendadas de uma visualização materializada nos níveis de tabela, banco de dados ou global.

Requisitos

Seu cluster PolarDB for MySQL deve atender a um dos seguintes requisitos:

  • MySQL 8.0.1, com versão secundária do mecanismo 8.0.1.1.51 ou posterior.

  • MySQL 8.0.2, com versão secundária do mecanismo 8.0.2.2.31 ou posterior.

Benefícios

  • Evita cálculos repetidos: Para consultas complexas e intensivas em recursos, os resultados são calculados uma única vez e reutilizados diversas vezes, melhorando significativamente a eficiência das consultas.

  • Pré-agregação de dados: Agrege previamente dados para relatórios diários, semanais e mensais, acelerando a geração de relatórios e a análise de dados.

  • Otimização de consultas em grandes conjuntos de dados: Reduz varreduras diretas em grandes volumes de dados brutos e acelera o tempo de resposta para consultas analíticas.

  • Suporte à análise multidimensional: Pré-calcule dados agregados para diferentes combinações de dimensões, oferecendo suporte eficiente a cenários OLAP e outras análises multidimensionais.

Casos de uso

Visualizações materializadas otimizam o desempenho de consultas ao pré-calcular e armazenar resultados. Elas são especialmente úteis para processar dados em grande escala e consultas complexas. Ao reduzir a sobrecarga de computações em tempo real e simplificar lógicas complexas, tornam-se ideais para geração rápida de relatórios e análise de dados.

  • Evitar cálculos repetidos: Ideal para armazenar resultados de cálculos frequentes e custosos. O uso de visualizações materializadas elimina a necessidade de recalcular os mesmos dados, aumentando consideravelmente a eficiência das consultas.

  • Pré-agregação de dados: Na geração de relatórios e análises, as visualizações materializadas podem agregar previamente informações como vendas diárias, semanais ou mensais e dados de comportamento do usuário. Armazenar resultados antecipadamente diminui o tempo e os recursos necessários para computação em tempo real.

  • Consultas otimizadas em grandes conjuntos de dados: Consultar diretamente grandes volumes de dados brutos pode ser demorado devido a varreduras frequentes e extensas. Visualizações materializadas reduzem a necessidade de acessar dados brutos diretamente, acelerando consultas e análises.

  • Suporte à análise multidimensional: É possível pré-calcular dados agregados para várias combinações de dimensões, permitindo respostas rápidas e eficientes para análises de dados multidimensionais baseadas em cenários.

Parâmetros

O método para modificar parâmetros de cluster do PolarDB difere entre o console e uma sessão de banco de dados. As diferenças são as seguintes:

  • No console do PolarDB

    • Compatibilidade: Para garantir compatibilidade com arquivos de configuração do MySQL, alguns parâmetros de cluster no console do PolarDB possuem o prefixo loose_.

    • Procedimento: Localize e modifique os parâmetros que possuem o prefixo loose_.

  • Em uma sessão de banco de dados (usando linha de comando ou cliente)

    • Procedimento: Ao usar o comando SET para modificar um parâmetro em uma sessão de banco de dados, remova o prefixo loose_ e utilize o nome original do parâmetro.

Parâmetro

Descrição

loose_materialized_view_enabled

Especifica se as visualizações materializadas devem ser ativadas. Valores válidos:

  • ON (padrão): Ativa o recurso.

  • OFF: Desativa o recurso.

loose_enable_materialized_view_parallel

Define se a consulta paralela para visualizações materializadas está habilitada. Valores válidos:

  • ON: Habilitado.

  • OFF (padrão): Desabilitado.

Criar uma visualização materializada

Sintaxe

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]
  AS select_statement

Permissões

  • Permissão CREATE no banco de dados onde a visualização materializada reside.

  • Permissão SELECT nas colunas relevantes (ou na tabela inteira) de todas as tabelas base da visualização materializada.

Parâmetros

Parâmetro

Obrigatório

Descrição

view_name

Sim

Nome da visualização materializada.

column_list

Não

Colunas a serem incluídas na visualização materializada. Para atribuir nomes específicos às colunas da visualização, liste-as na column_list, separadas por vírgulas (,).

REFRESH

Não

Define a política de atualização da visualização materializada.

  • COMPLETE (padrão): Atualização completa.

  • FAST: Atualização incremental.

Nota

Este tópico descreve a política de atualização completa. Para informações sobre a política de atualização incremental, consulte Atualizar incrementalmente uma visualização materializada.

ON

Não

Especifica o tipo de materialização da visualização.

  • COMMIT: Visualização materializada em tempo real.

  • DEMAND (padrão): Visualização materializada assíncrona.

Nota

Atualmente, apenas o tipo de visualização materializada assíncrona tem suporte.

START WITH

Não

Hora de início para a atualização automática de uma visualização materializada assíncrona.

NEXT

Não

Intervalo de atualização para uma visualização materializada assíncrona.

Nota

Se NEXT não for especificado, a visualização só poderá ser atualizada manualmente.

QUERY REWRITE

Não

Indica se a visualização materializada oferece suporte à reescrita de consulta.

  • DISABLE (padrão): Sem suporte.

  • ENABLE: Com suporte.

Nota

Atualmente, não há suporte à reescrita de consulta.

select_statement

Sim

Instrução de consulta que define os dados da visualização materializada. Esta instrução recupera dados das tabelas base e armazena o resultado na visualização materializada.

Exemplo

  1. Crie as tabelas table1 e table2 para usar como tabelas base da visualização 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. Crie uma visualização 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;

Consultar uma visualização materializada

Nota

Consultar uma visualização materializada exige a permissão SELECT na visualização. Não é necessária a permissão SELECT nas tabelas base subjacentes da visualização.

Consultar uma visualização materializada

SELECT * FROM mv1;

A saída esperada é:

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

Consultar definição da visualização

SHOW CREATE VIEW mv1;

A saída esperada é:

+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| 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 tabela do sistema

SELECT * FROM mysql.view_materialized_info;

Descrição dos campos

Campo

Descrição

TABLE_SCHEMA

Nome do banco de dados onde a visualização materializada está localizada.

TABLE_NAME

Nome da visualização materializada.

IS_DROPPED

Indica se a visualização foi removida.

  • 0: Não

  • 1: Sim

FIRST_REFRESH_TIME

Horário da primeira atualização, caso a atualização automática esteja configurada.

TIME_ZONE

Configuração do fuso horário.

REFRESH_CONDITION

Mecanismo de acionamento da atualização.

  • DEMAND: Atualização assíncrona, acionada automaticamente por agendamento ou manualmente.

  • COMMIT: Atualização em tempo real.

REFRESH_STRATEGY

Política de atualização da visualização materializada.

  • COMPLETE: Atualização completa.

  • FAST: Atualização incremental.

REFRESH_START_TIME

Horário inicial configurado para a primeira atualização.

NEXT_TIME_EXPRESSION

Definição do próximo horário de atualização para uma visualização materializada assíncrona.

LAST_START_TIME

Horário em que a última atualização realmente começou.

LAST_END_TIME

Horário em que a última atualização realmente terminou.

CONTAINER_TABLE_POSTFIX

Sufixo da tabela física usada para armazenamento de dados.

EXPIRED_TABLE_POSTFIX

Sufixo da tabela física que retém dados expirados após uma atualização.

IS_STOPPED

Indica se a atualização agendada está parada.

  • 0: Não

  • 1: Sim

CREATE_TIME

Horário de criação dos metadados da visualização materializada.

UPDATE_TIME

Horário da última atualização dos metadados da visualização materializada.

A saída esperada é:

+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+
| 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 |
+-----+--------------+------------+------------+---------------------+-----------+-------------------+------------------+---------------------+---------------------------+---------------------+---------------------+-------------------------+-----------------------+------------+---------------------+---------------------+

Atualizar uma visualização materializada

Atualmente, as visualizações materializadas oferecem suporte apenas à atualização completa. Esse processo utiliza um método fora do local (out-of-place): cria uma tabela base física oculta, executa a instrução de atualização nela e, em seguida, alterna entre a tabela base original e a oculta. Portanto, uma atualização completa requer espaço de armazenamento adicional. Sua principal vantagem é o suporte a qualquer consulta SQL.

Visualizações materializadas oferecem suporte a dois métodos de atualização: manual e agendada.

Atualização manual

Se uma visualização materializada não estiver configurada para atualização agendada, ou se o intervalo de atualização for longo, use o comando REFRESH MATERIALIZED VIEW para atualizar os dados manualmente.

REFRESH MATERIALIZED VIEW <view_name>;

Exemplo

  1. Insira novos dados de teste.

    INSERT INTO table1 VALUES (5, 'E', 500), (6, 'F', 600);
    INSERT INTO table2 VALUES (7, 'U', 60), (8, 'V', 70);
  2. Atualize manualmente a visualização materializada.

    REFRESH MATERIALIZED VIEW mv1;
  3. Consulte a visualização materializada.

    SELECT * FROM mv1;

    A saída esperada é:

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

Atualização agendada

Ao criar uma visualização materializada, especifique um horário de início para atualizações agendadas usando START WITH e configure um intervalo de atualização automática com NEXT. O sistema agenda automaticamente a tarefa de atualização com base nas configurações especificadas.

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;

Remover uma visualização materializada

Nota

Remover uma visualização materializada exige a permissão DROP no banco de dados onde a visualização materializada está localizada.

Sintaxe

DROP MATERIALIZED VIEW <view_name>;

Exemplo

DROP MATERIALIZED VIEW mv1;

Monitorar e gerenciar tarefas

A atualização agendada de uma visualização materializada depende do mecanismo de agendamento automático do sistema. Pode ser necessário monitorar e gerenciar um grande número de tarefas agendadas. Pause ou reinicie tarefas de atualização agendada para uma visualização materializada nos níveis de tabela, banco de dados ou global.

Visualizar fila de tarefas

Consulte a visualização do sistema information_schema.materialized_view_refresh_queue para ver a fila de atualização.

SELECT * FROM information_schema.materialized_view_refresh_queue;

Pausar fila de tarefas

Por tabela

STOP MATERIALIZED VIEW task FOR TABLE mv1;

Por banco de dados

STOP MATERIALIZED VIEW task FOR DATABASE mv1;

Globalmente

STOP MATERIALIZED VIEW task FOR ALL;

Reiniciar fila de tarefas

Por tabela

RESTART MATERIALIZED VIEW task FOR TABLE mv1;

Por banco de dados

RESTART MATERIALIZED VIEW task FOR DATABASE mv1;

Globalmente

RESTART MATERIALIZED VIEW task FOR ALL;