Voy a diseñar un DW y escuché sobre vistas materializadas. En realidad, quiero crear una vista y debería actualizarse automáticamente cuando se cambian las tablas base. ¿Alguien puede explicar con un ejemplo de consulta?
101
Voy a diseñar un DW y escuché sobre vistas materializadas. En realidad, quiero crear una vista y debería actualizarse automáticamente cuando se cambian las tablas base. ¿Alguien puede explicar con un ejemplo de consulta?
Se denominan vistas indexadas en SQL Server; lea estos documentos técnicos para obtener más información:
Básicamente, todo lo que necesitas hacer es:
¡y tu estas listo!
La parte complicada es: la vista tiene que satisfacer una gran cantidad de restricciones y limitaciones, que se describen en el documento técnico. Si haces esto, eso es todo lo que hay. La vista se actualiza automáticamente, no se necesita mantenimiento.
Recursos adicionales:
Aunque puramente desde la perspectiva de la ingeniería, las vistas indexadas suenan como algo que todos podrían usar para mejorar el rendimiento, pero el escenario de la vida real es muy diferente. No he tenido éxito al usar vistas indexadas donde más las necesito debido a demasiadas restricciones sobre lo que se puede indexar y lo que no.
Si tiene uniones externas en las vistas, no se pueden utilizar. Además, las expresiones de tabla comunes no están permitidas ... De hecho, si tiene algún orden en subselecciones o tablas derivadas (como con partición por cláusula), tampoco tiene suerte.
Eso deja solo escenarios muy simples para utilizar vistas indexadas, algo en mi opinión se puede optimizar creando índices adecuados en las tablas subyacentes de todos modos.
Me encantará escuchar algunos escenarios de la vida real en los que las personas realmente han utilizado vistas indexadas para su beneficio y no podrían haberlo hecho sin ellas.
fuente
(NOEXPAND)
pistas a las consultas que usan las vistas indexadas. Y luego notas la diferencia. La ventaja de usar las vistas indexadas frente a "indexar correctamente las tablas" es que limita la selección de registros, de lo contrario está en lo correcto, sería lo mismo.Es posible que necesite un poco más de información sobre lo que es realmente una Vista materializada. En Oracle, estos son un objeto que consta de una serie de elementos cuando intenta construirlo en otro lugar.
Un MVIEW es esencialmente una instantánea de datos de otra fuente. A diferencia de una vista, los datos no se encuentran cuando consulta la vista, se almacena localmente en forma de tabla. El MVIEW se actualiza mediante un procedimiento en segundo plano que comienza a intervalos regulares o cuando cambian los datos de origen. Oracle permite actualizaciones completas o parciales.
En SQL Server, usaría lo siguiente para crear un MVIEW básico para (completar) actualizar regularmente.
Primero, una vista. Esto debería ser fácil para la mayoría, ya que las vistas son bastante comunes en cualquier base de datos. Siguiente, una tabla. Debe ser idéntica a la vista en columnas y datos. Esto almacenará una instantánea de los datos de la vista. Luego, un procedimiento que trunca la tabla y la vuelve a cargar en función de los datos actuales en la vista. Finalmente, un trabajo que activa el procedimiento para iniciar su trabajo.
Todo lo demás es experimentación.
fuente
Cuando la vista indexada no es una opción y las actualizaciones rápidas no son necesarias, puede crear una tabla de caché de pirateo:
luego sp_rename view / table o cambie cualquier consulta u otra vista que haga referencia a ella para que apunte a la tabla de caché.
programar diario / nocturno / semanal / lo que no se actualice como
NB: esto consumirá espacio, también en sus registros de tx. Se utiliza mejor para pequeños conjuntos de datos que son lentos de calcular. Tal vez refactorice para eliminar las columnas "fáciles pero grandes" primero en una vista exterior.
fuente
Para MS T-SQL Server, sugiero buscar en la creación de un índice con la declaración "incluir". No se requiere unicidad, ni tampoco la clasificación física de los datos asociados con un índice agrupado. El "Índice ... Incluir ()" crea un almacenamiento de datos físicos separado mantenido automáticamente por el sistema. Es conceptualmente muy similar a una vista materializada de Oracle.
https://msdn.microsoft.com/en-us/library/ms190806.aspx
https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx
fuente