Evitar predicados de unión de no igualdad
Los predicados de unión que utilizan operadores de comparación distintos de la igualdad deben evitarse porque el método de unión está limitado a un bucle anidado.
Además, es posible que el optimizador no pueda calcular una estimación de selectividad precisa para el predicado de unión. Sin embargo, los predicados de unión que no son de igualdad no siempre se pueden evitar. Cuando sean necesarios, asegúrese de que existe un índice adecuado en cualquiera de las tablas, porque los predicados de unión se aplicarán a la tabla interna de la unión de bucle anidado.
Un ejemplo común de predicados de unión que no son de igualdad es el caso en el que los datos de dimensión de un esquema en estrella deben versionarse para reflejar de forma precisa el estado de una dimensión en distintos puntos en el tiempo. A menudo se hace referencia a esto como una dimensión que cambia lentamente. Un tipo de dimensión que cambia lentamente implica incluir fechas de inicio y finalización efectivas para cada fila de dimensión. Una unión entre la tabla de hechos y la tabla de dimensiones requiere comprobar que una fecha asociada con el hecho se encuentre dentro de la fecha de inicio y finalización de la dimensión, además de unirse en la clave primaria de la dimensión. Esto se suele denominar dimensión de cambio lento de tipo 6. La unión de rango a la tabla de hechos para calificar adicionalmente la versión de dimensión por alguna fecha de transacción de hechos puede ser costosa. Por ejemplo:
SELECT…
FROM PRODUCT P, SALES F
WHERE
P.PROD_KEY = F.PROD_KEY AND
F.SALE_DATE BETWEEN P.START_DATE AND
P.END_DATEEn esta situación, asegúrese de que haya un índice en (SALES.PROD_KEY, SALES.SALE_DATE).
Considere la posibilidad de crear una vista estadística para ayudar al optimizador a calcular una mejor estimación de selectividad para este escenario. Por ejemplo:
CREATE VIEW V_PROD_FACT AS
SELECT P.*
FROM PRODUCT P, SALES F
WHERE
P.PROD_KEY = F.PROD_KEY AND
F.SALE_DATE BETWEEN P.START_DATE AND
P.END_DATE
ALTER VIEW V_PROD_FACT ENABLE QUERY OPTIMIZATION
RUNSTATS ON TABLE DB2USER.V_PROD_FACT WITH DISTRIBUTIONLas uniones de esquema en estrella especializadas, como por ejemplo la unión en estrella con AND de índice y las uniones de concentrador, no se tienen en cuenta si hay predicados de unión que no son de igualdad en el bloque de consulta. (Consulte Asegurarse de que las consultas se ajustan a los criterios necesarios para la unión de esquema en estrella.)