Materialized Views (ou Views Materializadas) são uma extensão avançada das views tradicionais em SQL. Ao contrário das views comuns, que não armazenam dados e são calculadas dinamicamente cada vez que são consultadas, as Materialized Views armazenam fisicamente os dados resultantes da consulta em uma tabela de banco de dados. Isso pode oferecer vantagens significativas em termos de desempenho, especialmente em cenários onde os dados subjacentes são volumosos ou onde as consultas são complexas e exigem muitos recursos.

Características das Materialized Views

  1. Persistência dos Dados: Os dados de uma Materialized View são armazenados fisicamente no disco, o que significa que as consultas subsequentes são executadas muito mais rapidamente, pois os resultados já estão prontos.
  2. Atualização Periódica: Uma Materialized View pode ser atualizada periodicamente, seja manualmente, seja automaticamente, para refletir as mudanças nos dados subjacentes.
  3. Desempenho Aprimorado: Ao pré-calcular e armazenar os resultados de consultas complexas, as Materialized Views reduzem significativamente o tempo de execução das consultas que dependem desses resultados.
  4. Armazenamento Adicional: Como as Materialized Views armazenam dados fisicamente, elas exigem espaço adicional em disco, ao contrário das views normais.

Como Criar uma Materialized View

A criação de uma Materialized View é semelhante à criação de uma view comum, mas com a adição de uma cláusula que especifica que os dados devem ser materializados.

Sintaxe Básica:

CREATE MATERIALIZED VIEW nome_da_view AS
SELECT colunas
FROM tabela_ou_joins
WHERE condicoes
[REFRESH [FAST|COMPLETE] [ON DEMAND | ON COMMIT]];

Exemplo: Suponha que temos uma tabela Vendas e queremos criar uma Materialized View que resuma o total de vendas por mês.

CREATE MATERIALIZED VIEW Vendas_Mensais AS
SELECT
    EXTRACT(MONTH FROM data_venda) AS mes,
    EXTRACT(YEAR FROM data_venda) AS ano,
    SUM(valor_total) AS total_vendas
FROM
    Vendas
GROUP BY
    EXTRACT(YEAR FROM data_venda), EXTRACT(MONTH FROM data_venda)
WITH DATA;

Explicação:

Atualização de Materialized Views

As Materialized Views podem se tornar obsoletas à medida que os dados subjacentes mudam. Existem diferentes maneiras de atualizar uma Materialized View:

  1. REFRESH ON DEMAND: A Materialized View é atualizada manualmente pelo DBA ou através de um agendamento.

    REFRESH MATERIALIZED VIEW Vendas_Mensais;