Start with a logical plan of what we want the query to be. Perform a branch-and-bound prune search to traverse the logical plan tree, convert logical operators into physical operators.