Unión cartesiana con las tablas pequeñas primero
Una unión cartesiana es una forma de unión de bucle anidado en la que no existen predicados de unión entre las dos tablas.
Db2 suele evitarse una unión cartesiana, pero a veces es el método más eficiente, como en el siguiente ejemplo. La consulta utiliza tres tablas: T1 contiene 2 filas, T2 contiene
3 filas y T3 contiene 10 millones de filas.
SELECT * FROM T1, T2, T3
WHERE T1.C1 = T3.C1 AND
T2.C2 = T3.C2 AND
T3.C3 = 5;Los predicados de unión se encuentran entre T1 y T3 y entre T2 y T3. Ningún predicado une T1 y T2.
Supongamos que 5 millones de filas de T3 tienen el valor C3=5. El tiempo de proceso es elevado si T3 es la tabla externa de la unión y se accede a las tablas T1 y T2 para cada uno de los 5 millones de filas.
Sin embargo, si se unen todas las filas de T1 y T2, sin un predicado de unión, sólo se accede a los 5 millones
de filas seis veces, una vez para cada fila de la unión cartesiana
de T1 y T2. Es difícil decir cuál es la vía de acceso más eficaz. Db2 evalúa las diferentes opciones y podría decidir acceder a las tablas en la secuencia T1, T2, T3.