Proceso de fusión

En el proceso de fusión, una sentencia que hace referencia a una vista o expresión de tabla se combina con la selección completa que ha definido la vista o expresión de tabla. Esta combinación crea una sentencia lógicamente equivalente. Esta sentencia equivalente se ejecuta en la base de datos.

Iniciar la información de la interfaz de programación específica del programa. El proceso de fusión es más efectivo que la materialización.

Importante : El proceso de fusión y la instrucción MERGE no son conceptos relacionados y no deben confundirse.

Ejemplo: oportunidad para proceso de fusión

Considere las sentencias siguientes, una de las cuales define una vista, la otra hace referencia a la vista:
View-defining statement:                 View referencing statement:
 
CREATE VIEW VIEW1 (VC1,VC21,VC32) AS     SELECT VC1,VC21
  SELECT C1,C2,C3 FROM T1                  FROM VIEW1
    WHERE C1 > C3;                         WHERE VC1 IN (A,B,C);
La selección completa de la sentencia que define la vista se puede fusionar con la sentencia que hace referencia a la vista para dar como resultado la siguiente sentencia lógicamente equivalente:
Merged statement:
 
SELECT C1,C2 FROM T1
  WHERE C1 > C3 AND C1 IN (A,B,C);

Proceso de fusión para las expresiones de tabla correlacionadas

Db2 puede realizar el proceso de fusión para expresiones de tabla correlacionadas.

SELECT *
	FROM T1,
		TABLE(
			SELECT T1.C2 from T3 AS T2
			WHERE T1.C1 = T2.C1
			) AS X;

Db2 no materializa la expresión de tabla en esta consulta. La expresión se fusiona en el bloque de consulta padre, y la consulta se vuelve a crear del modo siguiente:

SELECT * 
FROM T1, T3 AS T2
WHERE T1.C1 = T2.C1

Proceso de fusión para vistas y expresiones de tabla con subconsultas en uniones externas

Db2 puede evitar la materialización de consultas que tengan expresiones de tabla y vistas de uniones externas a ambos lados de las uniones externas izquierda y derecha. El tipo de proceso de fusión que puede Db2 puede utilizar depende de qué lado de la unión externa contenga la vista o expresión de tabla y si la consulta contiene una subconsulta.

Por ejemplo, la consulta siguiente utiliza una unión externa izquierda y contiene referencias a una vista situada en el lado izquierdo de la unión:

CREATE VIEW V1
	AS SELECT C1, C2
			FROM T3
			WHERE T3.C1 IN (SELECT T4.C1
										FROM T4 WHERE T4.C2 = T3.C2
										GROUP BY T4.C1);
SELECT T2.C1, T2.C2, T1.C1,T2.C2
FROM V1 AS T1
	LEFT OUTER JOIN
	T2 ON T1.C1= T2.C1
	WHERE (T1.C2 IN('712' , '713', '714'));

En tales casos, cuando la vista o la expresión de tabla está en el lado de la fila preservada de la unión, Db2 no materializa la vista para que los predicados selectivos como T1.C2 IN('712' , '713', '714') puedan aplicarse antes y reducir el tamaño de la unión.

Del mismo modo, si la vista o la expresión de tabla está en el lado de suministro nulo de una unión externa izquierda o derecha y se cumplen las condiciones siguientes, Db2 fusiona la expresión de tabla:
  • La vista o la expresión de tabla contiene una subconsulta.
  • La vista o la expresión de tabla contiene referencias solamente a una única tabla.

Por ejemplo, Db2 fusiona la expresión de tabla para la consulta siguiente:

SELECT *
FROM T1
	LEFT OUTER JOIN
		(SELECT *
			FROM T2
			WHERE T2.C1 = (SELECT MAX(T3.C1) FROM T3 )
		) TE
	ON T1.C1 = TE.C1;

Db2 fusiona la expresión de tabla convirtiendo el predicado de subconsulta en un predicado anterior a la unión para evitar la materialización. Por ejemplo:

SELECT *
FROM T1
	LEFT OUTER JOIN
	T2 as TT 
	ON TT.C1 = (SELECT MAX(TTT.C1) 
							FROM T3 AS TTT)
							AND T1.C1 = TT.C1;

Proceso de fusión de las sentencias con las expresiones CASE, VALUE, NULLIF, IFNULL y COALESCE

Si hay expresiones CASE, VALUE, NULLIF, IFNULL o COALESCE en el lado preservado de una unión externa, Db2 puede fusionar la vista o la tabla en lugar de materializar la vista o la tabla.

SELECT A.C1, B.C1, A.C2, B.C2
FROM T1 ,(SELECT COALESCE(C1, 0) ,C2
	FROM T2 ) A(C1,C2)
		LEFT OUTER JOIN
			(SELECT COALESCE(C1, 0) ,C2
			FROM T3 ) B(C1,C2)
		ON A.C2 = B.C2
WHERE T1.C2 = A.C2;

En este caso, Db2 fusiona la expresión de tabla A, pero materializa la expresión de tabla B para aplicar la operación COALESCE antes de suministrar nulos.

Más ejemplos

Las sentencias siguientes muestran otro ejemplo de cuándo una vista y una expresión de tabla se pueden fusionar
SELECT * FROM V1 X
  LEFT JOIN
    (SELECT * FROM T2) Y ON X.C1=Y.C1
       LEFT JOIN T3 Z ON X.C1=Z.C1; 
Merged statement:

SELECT * FROM V1 X 
  LEFT JOIN 
    T2 ON X.C1 = T2.C1
      LEFT JOIN T3 Z ON X.C1 = Z.C1; 
Finalizar la información de la interfaz de programación específica del programa.