Join -------------------- R join S = For each tuple r in R For each tuple s in S if r join s, then output Suppose M = 2 1 block of R, read all of S one page at a time, join and output repeat this for every block of R Cost of this: PAGES(R) + PAGES(R) * PAGES(S) R join S and S join R may have different costs (join ordering) Suppose M >> 2 Allocate M-1 blocks to reading R and 1 block to reading S Cost = PAGES(R) [read R once] + PAGES(S) * ceil(PAGES(R)/(M-1))