Operadores que aparecen en el Explorador del plan de acceso para los planes de acceso en DB2 para Linux, UNIX y Windows

Estos operadores pueden aparecer en el Explorador del plan de acceso cuando analiza el plan de acceso para una sentencia SQL que se ejecuta en DB2 para Linux, UNIX y Windows.
Suprimir

Este operador representa una operación necesaria. Para mejorar los costes del plan de acceso, concéntrese en los demás nodos (como exploraciones y uniones) que definan el conjunto de filas que deben suprimirse.

Sugerencia de rendimiento: Si suprime todas las filas de una tabla, considere la posibilidad de utilizar la sentencia DROP TABLE o el mandato LOAD REPLACE.

Exploración de índice definido por el usuario
La exploración utiliza las distintas condiciones de inicio/parada de la función de productor de rangos proporcionada por el usuario. Esta operación se lleva a cabo para delimitar el conjunto de filas calificadas antes de que el optimizador acceda a la tabla base (basada en predicados).
Sugerencia de rendimiento:
  • Con el tiempo, las actualizaciones de la base de datos pueden dar lugar a la fragmentación de un índice, lo que provoca que se generen más páginas de índice de las necesarias. Esta exploración puede corregirse descartando y creando de nuevo el índice o reorganizando el índice.
  • Si las estadísticas no están actualizadas, actualícelas mediante el mandato RUNSTATS.
Captar
Este operador representa la captación de columnas de una tabla utilizando un identificador de fila específico (RID).
Datos de filtro
Este operador representa la aplicación de predicados residuales, de modo que los datos se filtran en función de los criterios proporcionados por los predicados.
Generar filas de tabla
Este operador representa una función incorporada que genera una tabla de filas si utilizar la entrada de tablas, índices ni operadores.
Agrupar por
Este operador representa la agrupación de filas de acuerdo con los valores comunes de columnas o funciones designadas. Esta operación es necesaria para producir un grupo de valores o para evaluar un conjunto de funciones. Si no se especifica ninguna columna GROUP BY, este operador puede utilizarse si hay funciones de agregación en la lista SELECT. Su presencia indica que el optimizador trata toda la tabla como un único grupo cuando realiza la agregación.
Sugerencia de rendimiento:
  • Para mejorar los costes del plan de acceso, concéntrese en los demás nodos (como exploraciones y uniones) que definan el conjunto de filas que deben agruparse.
  • Para mejorar el rendimiento de una sentencia SELECT que contiene una única función de agregado pero ninguna cláusula GROUP BY, intente lo siguiente:
    • Para una función de agregación MIN(C), cree un índice ascendente en C.
    • Para una función de agregación MAX(C), cree un índice descendente en C.
Unión hash
Este operador representa una unión hash para la que las filas cualificadas de las tablas se enlazan mediante hash para permitir la unión directa sin ordenar previamente el contenido de las tablas.

Se necesita una unión siempre que se hace referencia a más de una tabla en una cláusula FROM. Una unión hash es posible siempre que un predicado de unión establece la correspondencia entre columnas iguales para dos tablas distintas. Los predicados de unión debe ser exactamente del mismo tipo de datos. Las uniones hash también pueden surgir de una consulta reescrita, como ocurre con las uniones de bucle anidadas.

Una unión hash no requiere que se ordenen las tablas de entrada. La unión se lleva a cabo explorando la tabla interna de la unión hash y generando una tabla de bucle aplicando hash a los valores de la columna de unión. Luego lee la tabla externa, aplicando hash a los valores de la columna de unión, y verificando la tabla de búsqueda generada para la tabla interna.

Sugerencia de rendimiento:

  • Utilice predicados locales (es decir, predicados que hacen referencia a una tabla) para reducir el número de filas que deben unirse.
  • Incremente el tamaño del almacenamiento dinámico de ordenación para que sea suficientemente grande para contener la tabla de búsqueda hash en la memoria.
  • Si las estadísticas no están actualizadas, actualícelas mediante el mandato RUNSTATS.
Insertar

Este operador representa una operación necesaria. Para mejorar los costes del plan de acceso, concéntrese en los demás nodos (como exploraciones y uniones) que definan el conjunto de filas que deben suprimirse.

Inserción de índice
Este operador representa la adición mediante AND de los resultados de varias exploraciones de índice utilizando técnicas de mapa de bits dinámicas. La operación permite la aplicación a varios índices de los predicados unidos mediante AND, con el objeto de reducir al mínimo los accesos a tablas subyacentes.
Esta operación se lleva a cabo para:
  • Delimitar el conjunto de filas antes acceder a la tabla de base de datos.
  • Unir mediante AND los predicados aplicados a varios índices.
  • Unir mediante AND los resultados de semi uniones, utilizados en uniones en estrella.
Sugerencias de rendimiento:
  • Con el tiempo, las actualizaciones de la base de datos pueden dar lugar a la fragmentación de un índice, lo que provoca que se generen más páginas de índice de las necesarias. Esta exploración puede corregirse descartando y creando de nuevo el índice o reorganizando el índice.
  • Si las estadísticas no están actualizadas, actualícelas mediante el mandato RUNSTATS.
  • Por lo general, las exploraciones de índice son más efectivas cuando el número de filas calificadas es reducido. Para estimar el número de filas calificadas, el optimizador utiliza las estadísticas disponibles para las columnas a las que se hace referencia en los predicados. Si algunos valores aparecen con más frecuencia que otros, es importante solicitar estadísticas de distribución utilizando la cláusula WITH DISTRIBUTION para el mandato RUNSTATS. Si se utilizan estadísticas de distribución no uniforme, el optimizador puede distinguir entre los valores que se producen con más o menos frecuencia.
  • Esta operación puede explorar de forma óptima índices de columna únicos, ya que las claves de inicio y detención son muy importantes para la misma.
Exploración de índice
Este operador representa la exploración de un índice para producir una secuencia reducida de ID de fila. La exploración puede utilizar condiciones de inicio y detención opcionales, o puede aplicarse a predicados indizables que hacen referencia a columnas del índice.

Esta operación se lleva a cabo para delimitar el conjunto de ID de fila calificables antes de acceder a la tabla base (basada en predicados).

Sugerencias de rendimiento:
  • Con el tiempo, las actualizaciones de la base de datos pueden dar lugar a la fragmentación de un índice, lo que provoca que se generen más páginas de índice de las necesarias. Esta exploración puede corregirse descartando y creando de nuevo el índice o reorganizando el índice.
  • Cuando se accede a dos o más tablas, el acceso a la tabla interna mediante un índice puede ser más eficiente si se proporciona un índice en la columna de unión de la tabla externa.
  • Si las estadísticas no son actuales, actualícelas utilizando el mandato RUNSTATS.
  • Por lo general, las exploraciones de índice son más efectivas cuando el número de ID de fila calificado es reducido. Para estimar el número de ID de filas calificados, el optimizador utiliza las estadísticas disponibles para las columnas a las que se hace referencia en los predicados. Si algunos valores aparecen con más frecuencia que otros, es importante solicitar estadísticas de distribución utilizando la cláusula WITH DISTRIBUTION para el mandato RUNSTATS. Si se utilizan estadísticas de distribución no uniforme, el optimizador puede distinguir entre los valores que se producen con más o menos frecuencia.
Unión de exploración de fusión
Una unión de fusión para la que las filas calificadas de las tablas externa e interna deben estar por orden de predicado de unión. Una unión de fusión también se conoce como unión de exploración de fusión o unión de fusión de listas ordenadas.

Una unión es necesaria si hay más de una tabla a la que se hace referencia a una cláusula FROM. Una unión de fusión es posible si hay un predicado de unión que establece la igualdad entre columnas de dos tabla distintas. También puede surgir de una subconsulta reescrita.

Una unión de fusión requiere una entrada ordenada en las columnas de unión, ya que las tablas suelen explorarse sólo una vez. Esta entrada ordenada se obtiene al acceder a un índice o a una tabla ordenada.

Sugerencias de rendimiento:
  • Utilice predicados locales (es decir, predicados que hacen referencia a una tabla) para reducir el número de filas que deben unirse.
  • Si las estadísticas no son actuales, actualícelas utilizando el mandato RUNSTATS.
Unión de bucle anidado
Este operador representa una unión de bucle anidado que explora (generalmente con una exploración de índice) la tabla interna una vez para cada fila de la tabla externa.

Una unión es necesaria si hay más de una tabla a la que se hace referencia a una cláusula FROM. Una unión anidada no necesita ningún predicado de unión, pero generalmente presenta un mejor rendimiento si tiene uno.

Una unión de bucle anidado presenta mejor rendimiento en estos caso:
  • Realizando la exploración a través de la tabla interna para cada fila de la tabla externa a la que se accede.
  • Realizando un bucle de índice en la tabla interna para cada fila de la tabla externa a la que se accede.
Sugerencias de rendimiento:
  • Es probable que una unión de bucle anidado sea más eficiente si hay un índice en las columnas de predicado de unión de la tabla interna.

    Otra forma, menos importante, de hacer que la unión sea más eficiente es crear un índice en las columnas de unión de la tabla externa de modo que la tabla externa esté ordenada.

  • Si las estadísticas no son actuales, actualícelas utilizando el mandato RUNSTATS.
Retorno
Este operador representa la devolución de datos de una consulta. Éste es el operador final en el plan de acceso y muestra los valores y costes totales acumulados para el plan de acceso.
Exploración de identificador de fila (RID)
Este operador representa una exploración de una lista de identificadores de fila (RID) obtenidos de uno o más índices.
El optimizador considera esta opción cuando:
  • Los predicados se conectan mediante palabras clave OR o bien existe un predicado IN. Puede utilizarse una técnica denominada ORing, que combina los resultados de varios accesos de índice en la misma tabla.
  • Es beneficioso utilizar list prefetch para un único acceso de índice, ya que ordenar los identificadores de fila antes de acceder a las filas base hace que la E/S sea más eficiente.
Captar datos remotos
Este operador representa la recuperación de datos de un origen de datos remoto en un sistema federado.
Ordenar
Este operador representa la ordenación de las filas en una tabla en el orden de una o más de sus columnas, eliminando opcionalmente entradas duplicadas.

La ordenación es necesaria si no existe ningún índice que satisfaga la ordenación solicitada, o cuando la ordenación resultaría más económica que una exploración de índice. La ordenación suele llevarse a cabo como operación final una vez que se han obtenido las filas necesarias o par ordenar datos antes de una operación de unión o de agrupación.

Si el número de filas es alto o si los datos ordenados no pueden canalizarse, la operación requiere la generación costosa de tablas temporales.

Exploración de tabla
Este operador representa una exploración de tabla (exploración de relación) que recupera filas leyendo todos los datos necesarios directamente desde las páginas de datos.
El optimizador selecciona este tipo de exploración a través de una exploración de índice en estas situaciones:
  • El rango de valores explorados se produce con frecuencia (es decir, se accede a la mayor parte de la tabla).
  • La tabla es pequeña.
  • La agrupación en clúster de índices es baja.
  • No existe un índice en la tabla.
Tabla temporal
Este operador representa la ordenación de datos en una tabla temporal, de modo que los datos pueden leerse durante otra operación.
Cola de tabla
Este operador representa una cola de tabla que se utiliza para pasar datos de tabla de un agente de bases de daos a otro cuando hay varios agentes de base de datos que procesan una consulta. Si hay un paralelismo implicado, se utilizan varios agentes de base de datos para procesar una consulta.
Unión

Este operador representa una operación necesaria. Para mejorar los costes del plan de acceso, concéntrese en los demás nodos (como exploraciones y uniones) que definan el conjunto de filas que deben suprimirse.

Eliminación de duplicados
Este operador representa la eliminación de filas que tienen valores duplicados para columnas especificadas.
Actualizar

Este operador representa una operación necesaria. Para mejorar los costes del plan de acceso, concéntrese en los demás nodos (como exploraciones y uniones) que definan el conjunto de filas que deben suprimirse.

Exploración del índice sobre datos XML
Este operador representa una exploración de rango de cualquier índice asociado a través de los datos XML correspondientes antes de acceder a la tabla base. La operación delimita el conjunto de ID de fila e ID de nodos XML cualificados.
Sugerencias de rendimiento:
  • Con el tiempo, las actualizaciones de la base de datos pueden dar lugar a la fragmentación de un índice, lo que provoca que se generen más páginas de índice de las necesarias. Esta exploración puede corregirse descartando y creando de nuevo el índice o reorganizando el índice.
  • Cuando se accede a dos o más tablas, el acceso a la tabla interna mediante un índice puede ser más eficiente si se proporciona un índice en la columna de unión de la tabla externa.
  • Si las estadísticas no son actuales, actualícelas utilizando el mandato RUNSTATS.
Exploración de documento XML
Este operador representa la navegación de fragmentos XML para evaluar expresiones XPath y extraer los fragmentos de documento necesarios.
Adición con AND de índices XML
Este operador representa el índice sobre la adición mediante AND de datos XML de los resultados de varias exploraciones de índice, utilizadas para la evaluación de predicados complejos de una misma consulta.
Para que esta operación pueda utilizarse, deben cumplirse las siguientes condiciones:
  • Sólo se utilizan predicados de igualdad.
  • La vía de acceso de búsqueda de índices no contiene comodines.
  • Todos los predicados se utilizan en la misma columna XML.

Si alguna de estas condiciones no se cumple, se utilizará la operación de intersección de índices.

Sugerencias de rendimiento:
  • Con el tiempo, las actualizaciones de la base de datos pueden dar lugar a la fragmentación de un índice, lo que provoca que se generen más páginas de índice de las necesarias. Para corregir esta situación, puede descartar el índice y crearlo de nuevo, o bien reorganizar el índice.
  • Si las estadísticas no son actuales, actualícelas utilizando el mandato RUNSTATS.
  • Por lo general, las exploraciones de índice son más efectivas cuando el número de filas calificadas es reducido. Para estimar el número de filas calificadas, el optimizador utiliza las estadísticas disponibles para las columnas a las que se hace referencia en los predicados. Si algunos valores aparecen con más frecuencia que otros, es importante solicitar estadísticas de distribución utilizando la cláusula WITH DISTRIBUTION con el mandato RUNSTATS. Si se utilizan estadísticas de distribución no uniforme, el optimizador puede distinguir entre los valores que se producen con más o menos frecuencia.

Comentarios