Grandes volúmenes de
datos
Vistas materializadas
bases de datos
Vistas materializadas en Oracle
Es una vista pero no sólo se almacena su definición,
sino también los datos que devuelve en una tabla
que el sistema crea de forma automática para ello.
Estos datos deben ser refrescados.
Se le pueden definir índices.
Se le puede especificar parámetros de
almacenamiento como a una tabla (internamente es
una tabla)
2
Vistas materializadas en Oracle
Ventajas
◦ Su uso es transparente para las aplicaciones y los usuarios
◦ Evita realizar cálculos que requieren gran tiempo de ejecución
en el momento de ejecución de la consulta
Agregaciones (sum, avg, …)
Joins complejos entre tablas
◦ Existe la posibilidad de que el optimizador de consultas
reconozca automáticamente cuando existe una vista
materializada que puede ser utilizada para resolver una consunta
Re-escribe la consulta (QUERY REWRITE)
Compara los planes de ejecución
Elige el mejor
3
Vistas materializadas en Oracle
Desventajas
◦ Ocupan espacio
Tabla interna
◦ Necesitan de operaciones de refresco
Actualización temporal (refrescos programados)
Actualización instantánea (cada vez que se
modifican los datos de origen)
4
Vistas materializadas en Oracle
Sintaxis reducida
CREATE MATERIALIZED VIEW [esquema.]vista
[BUILD { IMMEDIATE | DEFERRED }
[ REFRESH { FAST | COMPLETE | FORCE }
{ ON { DEMAND | COMMIT }
| { START WITH | NEXT } date ]
[ { DISABLE | ENABLE } QUERY REWRITE ]
AS subquery ;
DROP MATERIALIZED VIEW [esquema.]tabla
[PRESERVE TABLE];
Sintaxis completa:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm
5
Vistas materializadas en Oracle
BUILD
◦ Immediate
Opción por defecto
Refresca los datos inmediatamente con la
ejecución de la sentencia de creación
◦ Deferred
La vista se crea vacía
Los datos aparecerán en la siguiente operación de
refresco
6
Vistas materializadas en Oracle
REFRESH
◦ complete | fast | force
Complete. Se ejecuta cada vez la query de la vista. Se borran
todos los datos y se vuelven a calcular.
Fast. Método de refresco incremental. Los cambios en las
tablas que afectan a la vista se almacenan en un log asociado
a la tabla
El log de las tablas maestras de la vista han de crearse
previo a la vista (create materialized view log on nombre_tabla ….)
No permitido con BUILD DEFERRED
Muchas restricciones sobre la sentencia de la vista.
Para saber si una vista materializada puede utilizar el
método FAST, el package DBMS_MVIEW proporciona el
procedure EXPLAIN_MVIEW
Force. Valor por defecto. Si puede rápido y si no completo
7
Vistas materializadas en Oracle
REFRESH
Demand | commit
Commit. Refresco cada vez que una operación
modifica alguna de las tablas maestras (sólo para
tipo FAST)
Demand. Valor por defecto. Bajo demanda. Una
opción de refresco es utilizar uno de los
procedimientos de refresco (DBMS_MVIEW)
8
Vistas materializadas en Oracle
REFRESH
Cuando es “on demand” también podemos dejar
programados los refrescos con: start with | next
Start with. Especifica una expresión temporal para
el primer refresco
Next. Especifica una expresión temporal para
calcular el intervalo entre refrescos
ORACLE automáticamente genera un JOB para
estos refrescos
9
Vistas materializadas en Oracle
Ejemplo
se poblará en
la siguiente
operación de
refresco
CREATE MATERIALIZED VIEW mv_pedidos Refresco completo y bajo
demanda llamando a
BUILD DEFERRED
procedimiento
DBMS_MVIEW
REFRESH COMPLETE ON DEMAND
AS
SELECT fech_pedi, esta_pedi, count(*) AS nume_pedi
FROM pedidos
GROUP BY fech_pedi, esta_pedi;
DBMS_MVIEW.REFRESH(
LIST
=> ‘MV_PEDIDOS'
,ATOMIC_REFRESH
=> FALSE);
Podemos especificar una
lista de vistas.
Tiene otros parámetros.
(ver manual)
Forzamos un truncate en
vez de un delete. Es más
rápido aunque la vista
aparece vacía hasta que no
se finaliza el proceso.
10
Vistas materializadas en Oracle
Ejemplo
Refresco completo, automático cada siete días
Comenzando 7 después de la creación de la vista
CREATE MATERIALIZED VIEW mv_pedidos
BUILD IMMEDIATE
REFRESH complete NEXT sysdate + 7
AS SELECT * FROM pedidos;
Podemos especificar parámetros de
almacenamiento
CREATE MATERIALIZED VIEW mv_pedidos
TABLESPACE OTRAS_APP_DAT
Se creará inicialmente vacia, el primer referesco
STORAGE (INITIAL 50K NEXT 50K)
será hoy a las 13 y todos los días a las 6:00
completo
BUILD DEFERRED
REFRESH COMPLETE
START WITH ROUND(SYSDATE) + 13/24 NEXT ROUND(SYSDATE+1)+ 6/24
AS AS SELECT * FROM pedidos;
11
Vistas materializadas en Oracle
Ejemplo
create materialized view log on pedidos with primary key
(fech_pedi, impo_pedi)
Creamos el log de la tabla maestra.
Almacenamos cambios en campos fecha e
including new values;
importe y los tenemos “localizados” por la primary
key de pedidos
create materialized view mv_pedidos
refresh fast on demand
as
select to_char(fech_pedi, 'YYYY'), sum(impo_pedi)
from pedidos
group by to_char(fech_pedi, 'YYYY')
Cuando se produzca el refresco solo se
refrescaran los datos modificados
12
Vistas materializadas en Oracle
QUERY REWRITE
◦ El optimizador puede decidir, por razones de
eficiencia, usar una vista materializada cuando
se encuentra con una query en la que podría ser
usada
◦ ENABLE: Indicamos que la vista es candidata
◦ DISBLE (por defecto) : Indicamos que la vista NO
es candidata
◦ Se debe activar en la parametrización del ORACLE
13
Vistas materializadas en Oracle
QUERY REWRITE (ejemplo)
El optimizador
decide
usar la visa
materializada
14