Sou novo em bancos de dados Oracle. Se entendi corretamente, a visão materializada é uma visão cujo conjunto de resultados é salvo como uma tabela física no banco de dados e essa visão/tabela é atualizada com base em algum parâmetro. Se a visualização é salva como uma tabela física, por que não armazenar os dados em uma tabela em primeiro lugar? Então, qual é o benefício de usar a visualização materializada em vez de uma tabela?
Um dos maiores benefícios de usar uma visão materializada é que a Oracle cuida de manter os dados sincronizados. Se você tiver uma tabela agregada separada, será responsável por manter os dados sincronizados. Isso geralmente requer uma quantidade razoável de código e uma quantidade razoável de testes e a maioria das organizações consegue cometer erros que deixam buracos que fazem com que a tabela agregada fique fora de sincronia. Isso é particularmente verdadeiro quando você tenta implementar atualizações incrementais da tabela agregada.
Outro grande benefício é que, dependendo das configurações, o Oracle pode usar a reescrita de consulta para usar visualizações materializadas quando os usuários emitem consultas em tabelas base. Assim, por exemplo, se você tiver vários relatórios existentes em uma tabela de detalhes que produz resultados agregados diários, mensais e anuais, você pode criar uma visão materializada na tabela base que agrega os dados em nível diário e o otimizador pode utilize essa visualização materializada para todas as suas consultas existentes. Isso torna muito mais fácil otimizar as cargas de trabalho de relatórios em um data warehouse sem tentar reescrever dezenas de relatórios para usar sua nova tabela agregada ou mexer
DBMS_ADVANCED_REWRITE
para forçar suas próprias reescritas das consultas.As visualizações materializadas são atualizadas automaticamente à medida que suas tabelas base são atualizadas.
Um bom caso para usar MVs é que algumas vezes você deseja agregar dados e obter essas informações resumidas de tabelas grandes com frequência e rapidez. Sem visualizações materializadas, você precisa desnormalizar algumas de suas tabelas e manter as agregações por meio de código ou verificar repetidamente grandes conjuntos de linhas. De qualquer maneira nem sempre é aceitável, especialmente com o painel e aplicativos online semelhantes. Se você mantiver os resultados em tabelas separadas, complicará o código da sua aplicação e, como diz o @Justin Cave, ficará responsável por garantir que os dados agregados manualmente estejam sincronizados. com os dados da tabela original.
Não é uma pessoa da Oracle, mas outro caso de uso seria soluções de terceiros. Eles geralmente não oferecem suporte para você fazer alterações em seus projetos, mas um MV seria "invisível" para seu código, mas forneceria acesso a relatórios/extrações de dados personalizados.
Não é gratuito, pois terá custos de armazenamento e custos de tempo de inserção/atualização potencialmente impactantes, mas isso pode ser compensado pelo tempo gasto recuperando os dados materializados versus uma "visão direta" ou criando tabelas reais e mantendo o ETL circundante.
Por fim, isso pode anular seu contrato de suporte com o fornecedor, consulte-seu-advogado-blá-blá-blá
Em vez de ir diretamente para as visualizações materializadas, deixe-me explicar as visualizações .
Basicamente, as visualizações existem logicamente ao contrário das tabelas. Se quisermos ocultar certas colunas para os usuários, não podemos usar tabelas. Criando uma visão podemos alcançar a segurança.
Caso de uso: se uma visão estiver relacionada internamente com 10 tabelas junto com group by e as funções tiverem milhões de linhas, levará muito tempo para executar.
Então aqui vem as visualizações materializadas que nos ajudam a obter dados mais rapidamente. As visualizações materializadas existem fisicamente no banco de dados. Sempre que a tabela base é atualizada, a visualização Materializada é atualizada.
Uma visão materializada pode ser configurada para ser atualizada automaticamente periodicamente. Uma tabela pode precisar de código adicional para truncar/recarregar dados.
exemplo: a visualização materializada com dados de várias tabelas pode ser configurada para atualizar automaticamente fora do horário de pico. Uma tabela física precisaria de código adicional para truncar/recarregar dados.
A segurança pode ser melhor controlada em uma visão materializada em vez de uma tabela.