hide
Free keywords:
-
Abstract:
Join ordering is one of the most important, but also
most challenging problems of query optimization. In general finding the optimal
join order is NP-hard. Existing dynamic programming algorithms
exhibit exponential runtime even for the restricted, but highly relevant
class of star joins. Therefore, it is infeasible to find the optimal join order
when the query includes a large number of joins.
Existing approaches for large queries switch to greedy heuristics
or randomized algorithms at some point, which can degrade query execution
performance by orders of magnitude.
We propose a new paradigm for optimizing large queries: when a query is
too complex to be optimized exactly, we simplify the query's join graph until
the optimization problem becomes tractable within a given time budget.
During simplification, we apply safe simplifications before more
risky ones. This way join ordering problems are solved optimally if possible,
and gracefully degrade with increasing query complexity.
This paper presents a general framework for query simplification and a
strategy for directing the simplification process. Extensive
experiments with different kinds of queries, different join-graph
structures, and different cost functions indicate that query
simplification is very robust and outperforms previous
methods for join-order optimization.