[
https://issues.apache.org/jira/browse/CALCITE-4578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17318830#comment-17318830
]
Julian Hyde commented on CALCITE-4578:
--------------------------------------
The best plan for your query should perhaps be a Values operator, not a Union?
Or possibly Unnest, if the expression is not constant.
Still, I’m sure the HepPlanner issue you found is real, and you should fix it.
It is useful to have tests with “large N” in the suite, so find inefficient
algorithms in Calcite.
> skip HepPlanner#buildFinalPlan when there's no rule fired in the program
> ------------------------------------------------------------------------
>
> Key: CALCITE-4578
> URL: https://issues.apache.org/jira/browse/CALCITE-4578
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jiatao Tao
> Assignee: Jiatao Tao
> Priority: Major
> Attachments: image-2021-04-11-17-42-38-595.png
>
>
> Example like that: insert xxx VALUES (1, 'one'), (2, 'two'), (3,
> 'three')...(10000, 'ten thousand');
> It generates a Union node with 10000 inputs, and the performance is poor,
> here's the profile:
> !image-2021-04-11-17-42-38-595.png|width=1086,height=240!
> We create a program(HepProgram) to do the union merge, in this case, we only
> have one union, so the rule is not fired, but it will still build the
> buildFinalPlan, and AbstractRelNode#explain has performance issue in this
> case(see the flame graph):
> {code:java}
> public RelNode findBestExp() {
> assert root != null;
> executeProgram(mainProgram);
> // Get rid of everything except what's in the final plan.
> collectGarbage();
> return buildFinalPlan(root);
> }
> {code}
> And the union has large inputs, so the performance is poor(in
> SetOp#replaceInput, we have to recomputeDigest ), we can skip buildFinalPlan
> if there's no rule fired.
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)