Tudo sobre

View Materializada: Por Que Seu Dashboard de BI é Rápido ou Lento

Se o dashboard demora 40 segundos para abrir, ele provavelmente calcula tudo na hora. A view materializada pré-computa e armazena o resultado — é o pedido certo a fazer ao time de dados em vez de "está lento".

Pense na diferença entre calcular o resultado de uma prova de matemática toda vez que alguém pergunta a nota, ou simplesmente anotar a nota já calculada numa planilha e consultar essa planilha quando precisar. O primeiro caminho é mais “correto” no sentido de sempre refletir a fórmula exata, mas é lento se a conta for complexa e for repetida com frequência. O segundo é instantâneo, porque o trabalho pesado já foi feito antes — só falta buscar o número.

Uma view materializada é exatamente essa segunda opção aplicada a banco de dados: em vez de recalcular uma consulta complexa toda vez que alguém a pede, o resultado é pré-computado e armazenado fisicamente, pronto para ser lido quase instantaneamente. O recurso existe desde o final dos anos 1990 em bancos relacionais como Oracle, e hoje está disponível na maioria dos bancos usados em analytics — PostgreSQL, Snowflake, BigQuery, Redshift.

View comum × view materializada

A confusão mais comum começa no nome. Uma “view” simples (não materializada) é apenas uma consulta salva — um atalho de sintaxe. Toda vez que alguém a consulta, o banco executa a query de novo, do zero, contra os dados atuais. Ela nunca fica desatualizada, mas também nunca fica rápida se a consulta por trás for pesada.

View comumView materializada
O que armazenaSó a definição da consulta (o “como calcular”)O resultado já calculado, fisicamente gravado
Velocidade de leituraIgual à consulta original — recalcula toda vezRápida — é uma leitura direta de dado pronto
AtualizaçãoSempre reflete o dado mais recenteReflete o dado até a última atualização (refresh) da view
CustoPago a cada consultaPago uma vez, no momento do refresh

A troca é clara: view materializada ganha velocidade de leitura ao custo de possível defasagem entre o dado real e o que está armazenado — defasagem que depende de quando a view foi atualizada pela última vez.

O diagnóstico dos 40 segundos

Se um dashboard de BI demora dezenas de segundos para abrir, ou trava ao aplicar um filtro, a causa mais provável é estrutural: ele está executando uma consulta complexa — cruzando várias tabelas grandes, agregando milhões de linhas — toda vez que alguém o abre, em vez de ler um resultado já pronto.

Esse é exatamente o cenário para o qual a view materializada existe. Em vez de recalcular “receita total por campanha, por canal, por dia” a cada carregamento da tela, o cálculo roda uma vez — de hora em hora, uma vez por dia, ou no intervalo que fizer sentido — e o dashboard passa a ler apenas essa tabela já agregada. A diferença de performance costuma ser de ordens de grandeza: de dezenas de segundos para milissegundos.

A mesma lógica por trás da home da Netflix

O princípio de “calcular antes, servir depois” não é exclusivo de banco de dados. É a mesma ideia por trás da página inicial personalizada de serviços de streaming: em vez de calcular, no exato instante em que você abre o app, quais títulos recomendar entre milhões de opções, o sistema pré-computa essas recomendações periodicamente e as armazena prontas para exibição instantânea.

Índice de buscador, cache de página, tabela agregada de BI e home pré-computada de streaming são a mesma estratégia aplicada em contextos diferentes: mover o trabalho caro para um momento em que ninguém está esperando, para que o momento em que alguém efetivamente precisa da resposta seja apenas uma consulta rápida a algo já pronto.

O pedido certo a fazer ao time de dados

Reportar “o dashboard está lento” para o time de dados ou para o analista de BI é um pedido vago que geralmente não leva a lugar algum, porque não indica onde está o problema nem qual é a solução esperada. O pedido específico e acionável é:

“Esse relatório pode virar uma tabela agregada pré-computada, atualizada de hora em hora, em vez de calcular tudo em tempo real toda vez que alguém abre?”

Essa formulação já indica a solução técnica esperada (view materializada, ou uma tabela de agregação equivalente construída via pipeline de ETL) e a decisão que fica em aberto para o time técnico responder: qual é o intervalo de atualização aceitável para aquele relatório específico.

A decisão que acompanha o ganho de velocidade: qual defasagem é aceitável

Toda view materializada troca velocidade por atualidade — a pergunta que precisa ser respondida, caso a caso, é quanto atraso o relatório específico pode tolerar:

  • Relatório executivo mensal ou dashboard de tendência de longo prazo — atualização diária ou até semanal costuma ser suficiente. Ninguém decide estratégia de trimestre com base em dado da última hora.
  • Dashboard de acompanhamento de campanha em andamento — atualização de hora em hora é geralmente o equilíbrio certo entre performance e utilidade.
  • Painel operacional que orienta ação imediata — como estoque em tempo real ou fila de atendimento — provavelmente não deveria ser uma view materializada com refresh lento; aqui o caso de uso pede dado mais próximo de tempo real, com as implicações de custo que isso traz.

Essa decisão conecta diretamente com a escolha entre processamento em lote e em stream: view materializada com refresh periódico é, essencialmente, uma forma de processamento em lote aplicada à camada de consulta.

O que acontece quando o refresh falha

Um ponto operacional que raramente é discutido até acontecer na prática: o que ocorre quando o job de atualização de uma view materializada falha silenciosamente — por exemplo, o banco de origem estava temporariamente indisponível no horário programado do refresh. Sem monitoramento adequado, a view continua servindo o último dado válido, agora cada vez mais desatualizado, sem nenhum sinal visível de que algo deu errado. O dashboard continua “funcionando” perfeitamente rápido, só que mostrando um retrato cada vez mais antigo da realidade.

Esse cenário é mais perigoso do que uma falha visível, porque não gera reclamação imediata — alguém só percebe quando um número parece estranho o suficiente para investigar, o que pode levar dias. A prática recomendada é monitorar explicitamente o horário do último refresh bem-sucedido de cada view materializada crítica, com alerta automático se esse horário ultrapassar o intervalo esperado — a mesma lógica de “confiabilidade não é apenas disponibilidade” que se aplica a qualquer sistema que pareça funcionar mas entregue dado errado.

Sinais de que um relatório é candidato a view materializada

  • A mesma consulta pesada é executada repetidamente por múltiplas pessoas ou múltiplos dashboards, sempre com o mesmo resultado até o próximo evento de atualização de dado.
  • O relatório cruza várias tabelas grandes com agregações (somas, médias, contagens) em vez de simplesmente listar registros.
  • Uma pequena defasagem — minutos ou horas — não muda a decisão que será tomada com base no relatório.
  • O tempo de carregamento cresce visivelmente conforme o volume histórico de dado aumenta, mesmo sem mudança na lógica da consulta.

Quando esses sinais se acumulam, a conversa sobre view materializada deixa de ser otimização prematura e vira correção de um problema estrutural real.

O que perguntar quando o dado parece “atrasado”

Depois que uma view materializada é implementada, o sintoma de “cache desatualizado” pode aparecer — alguém atualiza um dado na origem e o dashboard continua mostrando o valor anterior por um tempo. Não é bug, é o comportamento esperado: a pergunta certa deixa de ser “por que está errado” e passa a ser “qual é a frequência de refresh dessa view, e ela está de acordo com o que decidimos que era aceitável?” — a mesma mudança de postura que vale para qualquer cache na arquitetura de dado.

Materialized view não é o único caminho — e vale saber a diferença

Existem outras formas de pré-computar resultado, e reconhecê-las evita que a conversa técnica fique presa a um único termo. Uma tabela agregada construída via ETL — um job que roda periodicamente e grava o resultado numa tabela normal, sem usar o recurso nativo “materialized view” do banco — produz o mesmo efeito prático de leitura rápida, mas com controle mais manual sobre o processo de atualização. Bancos que não oferecem materialized view nativa (ou que a oferecem de forma limitada) costumam resolver o mesmo problema dessa forma alternativa.

A diferença prática para quem pede o resultado é pequena — em ambos os casos, o dashboard lê uma tabela já pronta em vez de recalcular na hora — mas a diferença para quem mantém o sistema importa: materialized view nativa costuma ter suporte embutido do próprio banco para atualização incremental (recalcular só o que mudou, não tudo de novo), enquanto uma tabela agregada via ETL manual depende de essa lógica ser construída à parte. Ao perguntar ao time de dados sobre a solução, vale perguntar especificamente se a atualização é incremental ou recalcula tudo do zero a cada refresh — a diferença de custo computacional entre as duas pode ser enorme em bases grandes.

Indexação sobre a própria view materializada

Um detalhe técnico que separa uma implementação bem feita de uma apressada: mesmo depois de pré-computar o resultado numa view materializada, ainda vale criar índices sobre as colunas mais consultadas dentro dela — sobretudo campos usados em filtro, como data de campanha ou ID de canal. Sem esse cuidado, consultar uma fatia específica da view (por exemplo, “só a campanha X dentro do período de um ano inteiro pré-agregado”) ainda pode ser mais lento do que deveria, porque o banco varre a view inteira mesmo já estando pré-computada.

Isso reforça que view materializada resolve o problema de recalcular a agregação pesada repetidamente, mas não substitui completamente boas práticas de indexação sobre o resultado armazenado. As duas técnicas se complementam: uma evita o trabalho de recomputação, a outra acelera o acesso ao resultado já pronto.

Próximos passos para revisar seus dashboards mais lentos

A ação concreta: identifique o relatório ou dashboard de BI mais reclamado internamente por lentidão e pergunte ao time de dados se ele roda como consulta em tempo real ou como tabela pré-agregada. Se for consulta em tempo real e a defasagem de algumas horas não comprometer a decisão que ele orienta, essa é a conversão de maior retorno imediato disponível.

Depois, repita o exercício para os próximos relatórios mais usados na rotina de marketing. Na maioria das operações, um punhado de consultas pesadas concentra a maior parte das reclamações de lentidão — resolver essas poucas costuma valer mais do que otimizar tudo de uma vez.

Compartilhe:
Foto de Começando na Web

Começando na Web

Dionatha é bacharel em Sistemas de Informação e especialista em Martech, com mais de 17 anos de experiência na integração de Marketing e Tecnologia para impulsionar negócios, equipes e profissionais a compreenderem e otimizarem as operações de marketing digital e tecnologia. Sua expertise técnica abrange áreas-chave como SEO técnico, Analytics, CRM, Chatbots, CRO (Conversion Rate Optimization) e automação de processos.

Sumário

Receba o melhor conteúdo sobre Marketing e Tecnologia

comunidade gratuita

Cadastre-se para o participar da primeira comunidade sobre Martech do brasil!