• 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))