Unión de bucle anidado (METHOD=1)
En una unión de bucle, Db2 explora la tabla compuesta (externa). Para cada fila de dicha tabla que proceda (que cumpla los predicados de la tabla), Db2 busca filas coincidentes de la tabla nueva (interna).
Db2 concatena las filas coincidentes que encuentra con la fila actual de la tabla compuesta. Si no coincide ninguna fila con la fila actual:
- Para una unión interna, Db2 descarta la fila actual.
- Para una unión externa, Db2 concatena una fila de valores nulos.
Los predicados de la etapa 1 y la etapa 2 eliminan las filas no calificadas
durante la unión. (Para una explicación de esos tipos de predicados, véase Predicados de etapa 1 y etapa 2 ) Db2 puede escanear cualquiera de las tablas utilizando cualquiera de los métodos de acceso disponibles, incluido el escaneo de espacio de tabla.
Consideraciones sobre el rendimiento para unión de bucle anidado
Una unión de bucle anidado explora de forma repetida la tabla interna de la unión.
Es decir, Db2 explora la tabla externa una vez y explora la tabla interna tantas veces como filas cualificadas tenga la tabla externa. Por lo tanto, la unión de bucle anidado suele ser el método de unión más eficaz cuando los valores de la columna de unión que se pasan a la tabla interna son secuenciales y el índice de la columna de unión de la tabla interna se agrupa en clústeres o el número de filas recuperadas de la tabla interna a través del índice es reducido.
Cuándo se utiliza la unión de bucle anidado
Db2 a menudo utiliza una unión de bucle anidado en las situaciones siguientes.
- La tabla externa es pequeña.
- Los predicados con factores de filtro pequeños reducen el número de filas calificadoras en la tabla externa.
- O bien existe un índice altamente agrupado y eficiente en las columnas de unión de la tabla interna , o Db2 puede crear dinámicamente un índice disperso en la tabla interna y usar ese índice para el acceso posterior.
- El número de páginas de datos accedidas de la tabla interna es reducido.
- No existen columnas de unión. Las uniones híbridas y de fusión de listas ordenadas necesitan columnas de unión; las uniones de bucle anidado no.
Ejemplo: unión externa izquierda
La figura siguiente ilustra un bucle anidado para una unión externa izquierda. La unión externa conserva la fila no coincidente en OUTERT con los valores A=10 y B=6. El mismo método de unión para una unión interna solo difiere en que descarta esa fila. La figura siguiente ilustra una unión de bucle anidado.
Ejemplo: prioridad de tabla de una fila
Para un caso como el siguiente ejemplo, con un índice único en T1.C2, Db2 detecta que T1 solo tiene una fila que satisface la condición de búsqueda. Db2 hace que T1 sea la primera tabla en una combinación de bucles anidados.
SELECT * FROM T1, T2
WHERE T1.C1 = T2.C1 AND
T1.C2 = 5;Ejemplo: unión cartesiana con tablas pequeñas primero
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.
Clasificaciones en la tabla compuesta
Db2 podría ordenar la tabla compuesta bajo las condiciones siguientes:
- Las columnas de unión de la tabla compuesta y de la tabla nueva no tienen la misma secuencia.
- La columna de unión de la tabla compuesta no tiene ningún índice.
- El índice tiene pocos clústeres.
Una unión de bucle anidado con una tabla compuesta clasificada tiene las siguientes ventajas de rendimiento:
- Utiliza la detección secuencial de forma eficaz para la captación previa de páginas de datos de la tabla nueva, lo que reduce el número de operaciones de E/S síncrona y el tiempo transcurrido.
- Evita los sondeos completos repetitivos del índice de la tabla interna utilizando la conversión de índice.
Unión de bucle anidado con acceso de índice disperso
Un valor de PRIMARY_ACCESSTYPE = T indica que Db2 crea dinámicamente un índice disperso en la tabla interna y utiliza el índice disperso para buscar en el archivo de trabajo que se crea en la tabla interna.
Una unión de bucle anidado con un índice disperso tiene las siguientes ventajas de rendimiento:
- El acceso a la tabla interna es más eficaz cuando la tabla interna no tiene ningún índice eficaz en las columnas de unión.
- Se evita una clasificación de la tabla compuesta cuando la tabla compuesta es relativamente grande.
La modalidad utilizada
para las hebras de acceso a bases de datos se controla mediante el valor del parámetro
de subsistema MXDTCACH. Sin embargo, si el almacenamiento disponible es insuficiente cuando se ejecuta la consulta, es posible que Db2 no pueda crear el índice disperso, lo que degradaría el rendimiento. La solución es resolver la falta de memoria. Sin embargo, si no puede hacerlo, reduzca la configuración MXDTCACH.