Description
Problem: when optimize some sql (has Union + Aggregate pattern) based on VolcanoPlanner may take a long time(tens of seconds or a few minutes).
After adding the time cost statistics for each rule during the optimization phase, I found that "AggregateUnionAggregateRule" has a large value, but the query pattern will not be matched finally.
So I try to make a minor change for AggregateUnionAggregateRule and the statistics shows a improvement for the same query be tested. (see the attached image)
1. Current AggregateUnionAggregateRule's match pattern:
topAgg | Union / \ Rel Rel
2. Real patterns that can possibly be matched:
topAgg | Union / \ bottomAgg Rel
Or
topAgg | Union / \ Rel bottomAgg
Will this change reasonable? (BTW, would it be useful to add some time cost statistics to VolcanoPlanner like the attached image below? I saw a CalciteTimingTracer class and getSqlTimingTracer() in CalciteTracer but not used.)
Attachments
Attachments
Issue Links
- relates to
-
CALCITE-260 RelOptPlannerRule should be able to match one child and ignore another
- Open