índice vistas vista puede porque optimizar ningún modificar materializadas materializada indexadas está esquema enlazada crear 12c sql-server database-design indexed-views

sql-server - puede - vistas indexadas oracle



¿Cómo crear vistas materializadas en SQL Server? (5)

Voy a diseñar un DW y escuché acerca de 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 ...


Aunque desde el punto de vista de la ingeniería, las vistas indizadas 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 indizadas 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 usar. Además, las expresiones de tablas comunes no están permitidas ... De hecho, si tiene algún pedido 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 que en mi opinión puede optimizarse creando índices adecuados en las tablas subyacentes de todos modos.

Estaré encantado de escuchar algunos escenarios de la vida real en los que las personas han utilizado puntos de vista indexados para su beneficio y no podrían haberlo hecho sin ellos.


Cuando la vista indizada no es una opción, y las actualizaciones rápidas no son necesarias, puede crear una tabla de caché de intrusión:

select * into cachetablename from myviewname alter table cachetablename add primary key (columns) -- OR alter table cachetablename add rid bigint identity primary key create index...

luego sp_rename view / table o cambie cualquier consulta u otras vistas que lo hagan referencia para apuntar a la tabla de caché.

programar diariamente / cada noche / semana / lo que no se actualice como

begin transaction truncate table cachetablename insert into cachetablename select * from viewname commit transaction

NB: esto comerá espacio, también en tus registros de tx. Se usa mejor para conjuntos de datos pequeños que tardan en computarse. Tal vez refactor para eliminar columnas "fáciles pero grandes" primero en una vista exterior.


Es posible que necesite un poco más de antecedentes sobre lo que realmente es una Vista Materializada. En Oracle, estos son un objeto que consiste en una serie de elementos cuando intentas 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 con un procedimiento de fondo que se inicia a intervalos regulares o cuando los datos de origen cambian. 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. A continuación, una tabla. Esto debería ser idéntico 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 comenzar es el trabajo.

Todo lo demás es experimentación.


Para MS T-SQL Server, sugiero buscar crear un índice con la instrucción "incluir". La exclusividad no es necesaria, como tampoco lo es 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://msdn.microsoft.com/en-us/library/ms190806.aspx


Se llaman vistas indizadas en SQL Server; lea estos libros blancos para obtener más información:

Básicamente, todo lo que necesitas hacer es:

  • crear una vista regular
  • crear un índice agrupado en esa vista

¡y tu estas listo!

La parte engañosa es que la vista tiene que satisfacer una gran cantidad de restricciones y limitaciones, que se describen en el libro blanco. Si haces esto, eso es todo lo que hay. La vista se actualiza automáticamente, no necesita mantenimiento.

Recursos adicionales: