jueves, 22 de mayo de 2014

Vista Materializada (VM) Oracle


FORMATO

CREATE MATERIALIZED VIEW mi_vista_materializada
 [TABLESPACE mi_tablespace]
 [BUILD {IMMEDIATE | DEFERRED}]
 [REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicio] NEXT fecha_intervalo } |
          {COMPLETE | FAST | FORCE} ]
 [{ENABLE|DISABLE} QUERY REWRITE] AS
     SELECT t1.campo1, t2.campo2
     FROM mi_tabla1 t1 , mi_tabla2 t2
     WHERE t1.campo_fk = t2.campo_pk AND …

OPCIONES DE SENTENCIA

Carga de datos en la vista

BUILD IMMEDIATE: Los datos de la vista se cargan en el mismo momento de la creación
BUILD DEFERRED: Sólo se crea la definición, los datos se cargarán más adelante.

Para realizar esta carga se puede utilizar la función REFRESH del package DBMS_MVIEW:

      begin
         dbms_mview.refresh('mi_vista_materializada');
      end;

Cada cuánto tiempo se refrescarán:

REFRESH ON COMMIT: Cada vez que se haga un commit en los objetos origin definidos en la select

REFRESH ON DEMAND: Como con la opción DEFERRED del BUILD, se utilizarán los procedures
REFRESH, REFRESH_ALL_MVIEWS o REFRESH_DEPENDENT del package DBMS_MVIEW
REFRESH [START WITH fecha_inicio] NEXT fecha_intervalo:

          START WITH: indica la fecha del primer refresco (fecha_inicio suele ser un SYSDATE)

          NEXT: indica cada cuánto tiempo se actualizará (fecha_intervalo podría ser SYSDATE +1 para       realizar el refresco una vez al día)

De qué manera se refrescarán

REFRESH COMPLETE:

El refresco se hará de todos los datos de la vista materializada, la recreará completamente cada vez que se lance el refresco.
Utiliza todo el recurso necesario para completar la actualización en la hora indicada.

REFRESH FAST:

El refresco será incremental, es la opción más recomendable.
Este tipo de refresco tiene bastantes restricciones según el tipo de vista que se esté creando.
Se realiza ocupando el mínimo de recurso de memoria para completar la actualización. Terminara dependiendo del número de registros a actualizar como también la memoria que tiene disponible

Una de las cosas importantes a tener en cuenta es que para poder utilizar este método casi siempre es necesario haber creado antes un LOG de la Vista materializada, indicando los campos clave en los que se basará el mantenimiento de la vista.

Se utiliza la instrucción  "CREATE MATERIALIZED VIEW LOG ON":
 
CREATE MATERIALIZED VIEW LOG ON mi_tabla_origen    
   WITH PRIMARY KEY    
   INCLUDING NEW VALUES;
REFRESH FORCE:

Con esta opción se indica que si es posible se utilice el metodo FAST, y si no el COMPLETE.

Para saber si una vista materializada puede utilizar el método FAST, el package DBMS_MVIEW proporciona el procedure EXPLAIN_MVIEW

Activación de la reescritura de consultas para optimizar el Data warehouse

ENABLE QUERY REWRITE: Se permite a la base de datos la reescritura de consultas
DISABLE QUERY REWRITE: Se desactiva la reescritura de consultas

QUERY REWRITE es la que más vamos a utilizar si queremos las vistas materializadas para optimizar nuestro Data warehouse.

Esta opción permite crear tablas agregadas en forma de vistas materializadas, y que cuando se lance una SELECT la base de datos pueda reescribirla para consultar la tabla o vista que vaya a devolver los datos solicitados en menos tiempo, todo de manera totalmente transparente al usuario.

Lo único que hay que hacer es crear las tablas agregadas como vistas materializadas con QUERY REWRITE habilitado.

No hay comentarios:

Publicar un comentario