- Don't always start with the previous join.
- Maintain a set of tables and joins.
- join(X, Y): Remove X, Y, add join(X, Y).
- At each step, pick X and Y from the set.
- E.g. {A, B, C, D}. pick A, B -> join(A, B)
- {C, D, join(A, B):. pick C, D -> join(C, D)
- {join(C, D), join(A, B):. pick join(A, B), join(C, D) -> join(join(A, B), join(C, D))