Summary
A declarative query can be executed in many ways: different indexes, join orders and join methods, with costs that differ by orders of magnitude. System R needed a way to choose a good plan automatically. Without one, the relational promise of data independence would be impractical.
The paper introduces cost-based optimisation. It estimates plan cost from I/O and CPU using catalog statistics and selectivity estimates for predicates. It then uses dynamic programming to search join orders, restricted to left-deep trees, and keeps plans that produce useful sort orders, which it calls interesting orders.
Most relational optimisers still follow this blueprint. Cardinality estimation, cost models and join enumeration remain active research areas, and all of them trace back to this paper.
