28. An apparatus comprising a computer-readable storage medium tangibly embodying program instructions for estimating a cardinality of a multiple-join query of relational database tables, the program instructions including instructions operable for causing a computer to: calculate data representing a join graph of the multiple-join query of the relational database tables, the join graph having a set of vertices and a set of edges, the set of vertices corresponding one-to-one with the relational database tables in the multiple-join query, the set of edges corresponding one-to-one with join predicates expressed and implied in the multiple-join query; eliminate tail vertices from the join graph to form a reduced graph; and use data representing the reduced join graph to estimate the cardinality to select a join order for the multiple-join query of the relational database tables.
28. An apparatus comprising a computer-readable storage medium tangibly embodying program instructions for estimating a cardinality of a multiple-join query of relational database tables, the program instructions including instructions operable for causing a computer to: calculate data representing a join graph of the multiple-join query of the relational database tables, the join graph having a set of vertices and a set of edges, the set of vertices corresponding one-to-one with the relational database tables in the multiple-join query, the set of edges corresponding one-to-one with join predicates expressed and implied in the multiple-join query; eliminate tail vertices from the join graph to form a reduced graph; and use data representing the reduced join graph to estimate the cardinality to select a join order for the multiple-join query of the relational database tables. 29. The apparatus of claim 28, wherein instructions to eliminate tail vertices comprise instructions to: examine each vertex in a pass through the join graph, and if a vertex is a tail vertex, delete the vertex and all edges adjacent to the vertex; and if any tail vertices were deleted during the pass through the join graph, make another pass through the join graph to delete tail vertices.