Qual é a diferença entre Views e Views Materialized no Oracle?

Respostas:

355

As visualizações materializadas são baseadas em disco e são atualizadas periodicamente com base na definição da consulta.

As visualizações são apenas virtuais e executam a definição de consulta cada vez que são acessadas.

dacracot
fonte
54
Além disso, quando você precisa de desempenho em dados que não precisam estar atualizados até o segundo momento, as visualizações materializadas são melhores, mas seus dados serão mais antigos do que em uma visualização padrão. Geralmente, os relatórios de BI ganham muitos benefícios com visualizações materializadas.
Marthinus
29
@Marthinus - isso está correto, exceto no caso de uma visão materializada que é REFRESH ON COMMIT - o MV retornará exatamente os dados que foram confirmados.
Jeffrey Kemp
2
Qual é o significado do DISK? Isso significa que a tabela não faz parte do DISK? Ele é armazenado em um arquivo e o acesso ao DISCO é mais rápido que o acesso ao arquivo ....?
Kanagavelu Sugumar 16/09
11
@KanagaveluSugumar Sim, as tabelas reais também são gravadas em disco.
Dacracot # 18/14
5
@dacracot Obrigado! Eu acho que você quer dizer outras tabelas que não sejam DB no DISK; este MVIEW também mantém uma tabela resolvendo todas as junções. Para que, no tempo de execução, o acesso à tabela única seja suficiente; e não há necessidade de consultar várias tabelas para condições de junção, o que geralmente é feito pela visualização normal. Obrigado!
Kanagavelu Sugumar
332

Visualizações

Eles avaliam os dados nas tabelas subjacentes à definição da visualização no momento em que a visualização é consultada . É uma visão lógica de suas tabelas, sem dados armazenados em nenhum outro lugar.

A vantagem de uma visão é que ela sempre retornará os dados mais recentes para você . A desvantagem de uma visão é que seu desempenho depende de quão boa é uma instrução select na qual a visão se baseia. Se a instrução select usada pela visualização ingressar em muitas tabelas ou usar associações baseadas em colunas não indexadas, a exibição poderá ter um desempenho ruim.

Vistas materializadas

Eles são semelhantes às visualizações regulares, pois são uma visualização lógica dos seus dados (com base em uma instrução select); no entanto, o conjunto de resultados da consulta subjacente foi salvo em uma tabela . A vantagem disso é que, quando você consulta uma exibição materializada, está consultando uma tabela , que também pode ser indexada.

Além disso, como todas as junções foram resolvidas no momento da atualização da exibição materializada, você paga o preço da junção uma vez (ou sempre que atualizar sua exibição materializada), em vez de cada vez que você seleciona na exibição materializada. Além disso, com a reescrita de consulta ativada, a Oracle pode otimizar uma consulta que seleciona a origem da sua visualização materializada, de forma que, em vez disso, leia da sua visualização materializada. Nas situações em que você cria visualizações materializadas como formas de tabelas agregadas ou como cópias de consultas frequentemente executadas, isso pode acelerar bastante o tempo de resposta do seu aplicativo de usuário final. A desvantagem, porém, é que os dados recuperados da visão materializada estão tão atualizados quanto a última vez em que a visão materializada foi atualizada .


As visualizações materializadas podem ser definidas para serem atualizadas manualmente, em um agendamento definido ou com base no banco de dados que detecta uma alteração nos dados de uma das tabelas subjacentes . As visualizações materializadas podem ser atualizadas de forma incremental combinando-as com logs de visualização materializados, que atuam como fontes de captura de dados alterados nas tabelas subjacentes.

As visualizações materializadas são usadas com mais frequência em aplicativos de data warehousing / business intelligence, onde a consulta de grandes tabelas de fatos com milhares de milhões de linhas resultaria em tempos de resposta à consulta que resultariam em um aplicativo inutilizável.


As visualizações materializadas também ajudam a garantir um momento consistente no tempo, semelhante ao isolamento de instantâneo .

Mike Williamson
fonte
9
+1 para a explicação detalhada, mas qual é a desvantagem da reescrita da consulta? Se a reescrita da consulta permitirá que a Oracle otimize ainda mais a consulta, devemos sempre ativar a reescrita da consulta, não?
Rosdi Kasim
6
@Rosdi, ele disse: "os dados que você recupera da exibição materializada são tão atualizados quanto a última vez que a exibição materializada foi atualizada"
Jeffrey Kemp
49

Uma exibição usa uma consulta para extrair dados das tabelas subjacentes.

Uma visualização materializada é uma tabela em disco que contém o conjunto de resultados de uma consulta.

As visualizações materializadas são usadas principalmente para aumentar o desempenho do aplicativo quando não é viável ou desejável usar uma visualização padrão com os índices aplicados a ela. As visualizações materializadas podem ser atualizadas regularmente por meio de gatilhos ou usando a ON COMMIT REFRESHopção Isso requer algumas permissões extras, mas não é nada complexo. ON COMMIT REFRESHestá em vigor desde pelo menos o Oracle 10.

Jeremiah Peschka
fonte
Há uma opção "REFRESH ON COMMIT" que pode ser especificada em uma Visualização materializada
Hybris95
Obrigado! Vou atualizar a resposta. Você sabe quando essa funcionalidade foi adicionada ao Oracle?
Jeremiah Peschka
20

As visualizações são essencialmente estruturas lógicas semelhantes a tabelas, preenchidas dinamicamente por uma determinada consulta. Os resultados de uma consulta de exibição não são armazenados em nenhum lugar do disco e a exibição é recriada toda vez que a consulta é executada. As visualizações materializadas são estruturas reais armazenadas no banco de dados e gravadas no disco. Eles são atualizados com base nos parâmetros definidos quando são criados.

user12786
fonte
Qual é o significado do DISK? Isso significa que a tabela não faz parte do DISK? Ele é armazenado em um arquivo e o acesso ao DISCO é mais rápido que o acesso ao arquivo ....?
Kanagavelu Sugumar 16/09
18

Vista materializada - uma tabela em um disco que contém o conjunto de resultados de uma consulta

Visualização não materializada - uma consulta que extrai dados da tabela subjacente

fn27
fonte
7

Visão: View é apenas uma consulta nomeada. Não armazena nada. Quando há uma consulta na exibição, ela executa a consulta da definição da exibição. Os dados reais vêm da tabela.

Visualizações materializadas: armazena dados fisicamente e é atualizado periodicamente. Ao consultar o MV, ele fornece dados do MV.

smshafiqulislam
fonte
2

Adicionando à resposta bastante completa de Mike McAllister ...

As visualizações materializadas só podem ser definidas para serem atualizadas automaticamente através do banco de dados, detectando alterações quando a consulta de visualização é considerada simples pelo compilador. Se for considerado muito complexo, não será possível configurar o que são gatilhos essencialmente internos para rastrear alterações nas tabelas de origem e atualizar apenas as linhas alteradas na tabela mview.

Ao criar uma exibição materializada, você descobrirá que o Oracle cria o mview e como uma tabela com o mesmo nome , o que pode tornar as coisas confusas.

Guisado S
fonte
As tabelas que suportam uma visualização materializada não têm o mesmo nome que a visualização.
Jeffrey Kemp
@JeffreyKemp, você tem certeza? A resposta aceita aqui stackoverflow.com/a/33552513 afirma o contrário. Embora sim, isso pode ter sido diferente em 2010, quando você comentou ...
leqid
Meu comentário acima deve estar em uma versão mais antiga (provavelmente 9i). Você está certo, os MVs recebem uma tabela com o mesmo nome, pelo menos nas versões modernas.
Jeffrey Kemp
1

As visualizações materializadas são a visualização lógica dos dados conduzidos pela consulta de seleção, mas o resultado da consulta será armazenado na tabela ou no disco, também a definição da consulta também será armazenada no banco de dados.

O desempenho da visualização Materializada é melhor que a visualização normal, porque os dados da visualização materializada serão armazenados na tabela e a tabela pode ser indexada de forma mais rápida para a junção. A junção também é feita no momento da atualização das visualizações materializadas, portanto, não é necessário disparar sempre junte a instrução como no caso de exibição.

Outra diferença inclui que, no caso do View, sempre obtemos os dados mais recentes, mas no caso da visualização Materializada, precisamos atualizar a visualização para obter os dados mais recentes. No caso da visualização Materializada, precisamos de um gatilho extra ou algum método automático para manter a MV atualizada, isso não é necessário para visualizações no banco de dados.

Dhirendra Gautam
fonte