Ejemplos de MQT

A continuación se muestran ejemplos de utilización de MQT.

Ejemplo 1

El primer ejemplo es una consulta que devuelve información sobre los empleados cuyo trabajo es DESIGNER. La consulta original:
SELECT D.deptname, D.location, E.firstnme, E.lastname, E.salary+E.comm+E.bonus as total_sal
FROM Department D, Employee E
WHERE D.deptno=E.workdept
AND E.job = 'DESIGNER'
Cree una tabla, MQT1, que utilice esta consulta:
CREATE TABLE MQT1 
       AS (SELECT D.deptname, D.location, E.firstnme, E.lastname, E.salary, E.comm, E.bonus, E.job
FROM Department D, Employee E
WHERE D.deptno=E.workdept)
DATA INITIALLY IMMEDIATE  REFRESH DEFERRED 
ENABLE QUERY OPTIMIZATION
MAINTAINED BY USER
Consulta nueva resultante después de sustituir las tablas especificadas por la MQT.
SELECT M.deptname, M.location, M.firstnme, M.lastname, M.salary+M.comm+M.bonus as total_sal
FROM MQT1 M
WHERE M.job = 'DESIGNER'

En esta consulta, la MQT coincide con parte de la consulta de usuario. La MQT se coloca en la cláusula FROM y sustituye las tablas DEPARTMENT y EMPLOYEE. Cualquier selección restante no realizada por la consulta MQT (M.job= 'DESIGNER ') se realiza para eliminar las filas adicionales. Se calcula la expresión de resultado, M.salary+M.comm+M.bonus. JOB debe estar en la lista de selección de la MQT para que se pueda realizar la selección adicional.

Diagrama de Visual Explain de la consulta cuando se utiliza la MQT:
Diagrama de Visual Explain de la consulta cuando se utiliza la MQT

Ejemplo 2

Obtener el salario total para todos los departamentos que se encuentran en 'NY'. La consulta original:
SELECT D.deptname, sum(E.salary) 
FROM DEPARTMENT D, EMPLOYEE E
WHERE D.deptno=E.workdept AND D.location = 'NY'
GROUP BY D.deptname
Cree una tabla, MQT2, que utilice esta consulta:
CREATE TABLE MQT2 
        AS (SELECT D.deptname, D.location, sum(E.salary) as sum_sal
FROM DEPARTMENT D, EMPLOYEE E
WHERE D.deptno=E.workdept 
GROUP BY D.Deptname, D.location)
DATA INITIALLY IMMEDIATE  REFRESH DEFERRED 
ENABLE QUERY OPTIMIZATION
MAINTAINED BY USER
Consulta nueva resultante después de sustituir las tablas especificadas por la MQT:
SELECT M.deptname, sum(M.sum_sal) 
FROM  MQT2 M
WHERE  M.location = 'NY'
GROUP BY M.deptname

Puesto que la MQT podría producir potencialmente más grupos que la consulta original, la consulta resultante final debe agrupar de nuevo y SUM los resultados para devolver la respuesta correcta. Además, la selección M.location= 'NY ' debe formar parte de la nueva consulta.

Diagrama de Visual Explain de la consulta cuando se utiliza la MQT:
Diagrama de Visual Explain de la consulta cuando se utiliza la MQT