Avoiding non-equality join predicates
Join predicates that use comparison operators other than equality should be avoided because the join method is limited to nested loop.
Additionally, the optimizer might not be able to compute an accurate selectivity estimate for the join predicate. However, non-equality join predicates cannot always be avoided. When they are necessary, ensure that an appropriate index exists on either table, because the join predicates will be applied to the inner table of the nested-loop join.
One common example of non-equality join predicates is the case
in which dimension data in a star schema must be versioned to accurately
reflect the state of a dimension at different points in time. This
is often referred to as a slowly changing dimension.
One type of slowly changing dimension involves including effective
start and end dates for each dimension row. A join between the fact
table and the dimension table requires checking that a date associated
with the fact falls within the dimension's start and end date,
in addition to joining on the dimension primary key. This is often
referred to as a type 6 slowly changing dimension. The
range join back to the fact table to further qualify the dimension
version by some fact transaction date can be expensive. For example:
SELECT…
FROM PRODUCT P, SALES F
WHERE
P.PROD_KEY = F.PROD_KEY AND
F.SALE_DATE BETWEEN P.START_DATE AND
P.END_DATE
In this situation, ensure that there is an index on (SALES.PROD_KEY, SALES.SALE_DATE).
Consider creating a statistical view to help the optimizer compute
a better selectivity estimate for this scenario. For example:
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 DISTRIBUTION
Specialized
star schema joins, such as star join with index ANDing and hub joins,
are not considered if there are any non-equality join predicates in
the query block. (See Ensuring that queries fit the required criteria for the star schema join.)