Specialized Techniques

           In the optimization approaches discussed above, starting with Selinger (which was based on SQL data model), the intend was to create a full-model (e.g. full-relational or full-SQL, etc.) query optimizer. Here we look at techniques that have focussed on part of the model.

           Specialized optimizers and specific optimization techniques have been developed that focus on a particular aspect, operator or set of operators, rather than on the entire optimization process. [Chaudhuri 94] and [Yan 94] focus on group_by (aggregation), [Levy 94] looks at moving predicates around and [Pellenkoft 96] looks at unique rules for generating all join orders.

           [Chaudhuri 94] shows three successive transformations for pushing an aggregate operator through a join. It is expected that the application of the aggregate operator will reduce the cardinality of a table. Since the subsequent joins will join smaller tables, the cost of performing the joins will be less.

           Predicate move around extends the ideas applied in the System R optimizer and elsewhere of pushing selection down, through joins and other operators. As with the aggregation, the idea is to reduce the cardinality of the tables, and thus reduce the cost of subsequent operations. [Levy 94] extends this idea to allow predicates to be moved "around" -- up, down and sideways -- instead of just down. Their model is an optimization process involving multiple query blocks, and so they analyze when predicates can be moved from one query block to another. Thus, it might be used in conjunction with the query rewrite mechanism of [Pirahesh 92]. Their approach makes use of functional dependencies in identifying legal transformations, and is one of the motivations for tracking functional dependencies as a logical property.






4. Related Work:    <System R> <Bottom Up> <Join Order Heuristics> <Query Blocks> <Rules> <Top Down> <Volcano> <Phases> <Specialized Techniques> <Unique Rules>
  4.1: Left-Deep  

 Page 16