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:
- 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.