Vou desenhar um DW e ouvi falar de visões materializadas. Na verdade, eu quero criar uma visão e ela deve atualizar automaticamente quando as tabelas base são alteradas. Alguém pode explicar com um exemplo de consulta ..
101
Vou desenhar um DW e ouvi falar de visões materializadas. Na verdade, eu quero criar uma visão e ela deve atualizar automaticamente quando as tabelas base são alteradas. Alguém pode explicar com um exemplo de consulta ..
Eles são chamados de visualizações indexadas no SQL Server - leia estes documentos para obter mais informações básicas:
Basicamente, tudo que você precisa fazer é:
e pronto!
A parte complicada é: a visualização deve satisfazer uma série de restrições e limitações - aquelas são descritas no white paper. Se você fizer isso - é tudo o que existe. A visualização está sendo atualizada automaticamente, sem necessidade de manutenção.
Recursos adicionais:
Embora puramente da perspectiva da engenharia, as visualizações indexadas parecem algo que todos poderiam usar para melhorar o desempenho, mas o cenário da vida real é muito diferente. Não tenho tido sucesso usando exibições indexadas onde mais preciso, devido a muitas restrições sobre o que pode ser indexado e o que não pode.
Se você tiver junções externas nas visualizações, elas não podem ser usadas. Além disso, expressões de tabela comuns não são permitidas ... Na verdade, se você tiver qualquer ordenação em subseleções ou tabelas derivadas (como partição por cláusula), você também está sem sorte.
Isso deixa apenas cenários muito simples para utilizar visualizações indexadas, algo na minha opinião pode ser otimizado criando índices apropriados em tabelas subjacentes de qualquer maneira.
Ficarei emocionado em ouvir alguns cenários da vida real em que as pessoas realmente usaram visualizações indexadas para seu benefício e não poderiam ter passado sem elas
fonte
(NOEXPAND)
dicas às consultas que usam as visualizações indexadas. E então você percebe a diferença. A vantagem de usar as visualizações indexadas versus "indexar corretamente as tabelas" é limitar a seleção de registros, caso contrário, você está correto, seria o mesmo.Você pode precisar de um pouco mais de conhecimento sobre o que realmente é uma Visualização Materializada. No Oracle, eles são um objeto que consiste em vários elementos quando você tenta construí-lo em outro lugar.
Um MVIEW é essencialmente um instantâneo de dados de outra fonte. Ao contrário de uma visão, os dados não são encontrados quando você consulta a visão, eles são armazenados localmente em uma forma de tabela. O MVIEW é atualizado usando um procedimento em segundo plano que inicia em intervalos regulares ou quando os dados de origem são alterados. O Oracle permite atualizações completas ou parciais.
No SQL Server, eu usaria o seguinte para criar um MVIEW básico para (completar) atualizar regularmente.
Primeiro, uma visão. Isso deve ser fácil para a maioria, já que as visualizações são bastante comuns em qualquer banco de dados. Em seguida, uma tabela. Isso deve ser idêntico à visualização em colunas e dados. Isso armazenará um instantâneo dos dados de exibição. Em seguida, um procedimento que trunca a tabela e a recarrega com base nos dados atuais da visualização. Finalmente, um trabalho que aciona o procedimento para iniciá-lo.
Todo o resto é experimentação.
fonte
Quando a exibição indexada não é uma opção e atualizações rápidas não são necessárias, você pode criar uma tabela de cache de hack:
em seguida, sp_rename view / table ou altere quaisquer consultas ou outras exibições que façam referência a ele para apontar para a tabela de cache.
agendar diariamente / noturno / semanal / outros itens de atualização como
NB: isso vai consumir espaço, também em seus logs tx. Melhor usado para pequenos conjuntos de dados que são lentos para computar. Talvez refatorar para eliminar colunas "fáceis, mas grandes" primeiro em uma visão externa.
fonte
Para o MS T-SQL Server, sugiro criar um índice com a instrução "incluir". A exclusividade não é necessária, nem a classificação física de dados associada a um índice clusterizado. O "Índice ... Incluir ()" cria um armazenamento de dados físicos separado mantido automaticamente pelo sistema. É conceitualmente muito semelhante a uma Visão Materializada Oracle.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx
fonte