Cartesian join with small tables first
A Cartesian join is a form of nested loop join in which no join predicates exist between the two tables.
Db2 usually
avoids a Cartesian join, but sometimes it is the most efficient method,
as
in the following example. The query uses three tables: T1 has 2 rows,
T2 has
3 rows, and T3 has 10 million rows.
SELECT * FROM T1, T2, T3
WHERE T1.C1 = T3.C1 AND
T2.C2 = T3.C2 AND
T3.C3 = 5;
Join predicates are between T1 and T3 and between T2 and T3. No predicate joins T1 and T2.
Assume that 5 million rows of T3 have the value C3=5. Processing time is large if T3 is the outer table of the join and tables T1 and T2 are accessed for each of 5 million rows.
However if all rows from T1 and
T2 are joined, without a join predicate,
the 5 million rows are accessed only six times, once for each row
in the Cartesian
join of T1 and T2. It is difficult to say which access path is the
most efficient. Db2 evaluates
the different
options and could decide to access the tables in the sequence T1,
T2, T3.