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).
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:
-
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
SETpara modificar um parâmetro em uma sessão de banco de dados, remova o prefixoloose_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:
|
loose_enable_materialized_view_parallel | Define se a consulta paralela para visualizações materializadas está habilitada. Valores válidos:
|
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
CREATEno banco de dados onde a visualização materializada reside.Permissão
SELECTnas 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 |
REFRESH | Não | Define a política de atualização da visualização materializada.
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.
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.
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
-
Crie as tabelas
table1etable2para 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); -
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
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.
|
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.
|
REFRESH_STRATEGY | Política de atualização da visualização materializada.
|
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.
|
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
-
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); -
Atualize manualmente a visualização materializada.
REFRESH MATERIALIZED VIEW mv1; -
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
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;