From 2082d0a01faf20ba5f6477209d0613cb643cd0fb Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Wed, 1 Jun 2022 23:43:08 +0800 Subject: [PATCH] [optimize](planner)remove redundant conjuncts on plan node (#9819) --- .../org/apache/doris/planner/PlanNode.java | 12 +++-- .../rewrite/ExtractCommonFactorsRule.java | 6 +++ .../data/performance/redundant_conjuncts.out | 39 ++++++++++++++++ .../performance/redundant_conjuncts.groovy | 45 +++++++++++++++++++ 4 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 regression-test/data/performance/redundant_conjuncts.out create mode 100644 regression-test/suites/performance/redundant_conjuncts.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java index 4b1bc1cde0..a68655eb61 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/PlanNode.java @@ -375,14 +375,18 @@ abstract public class PlanNode extends TreeNode { if (conjuncts == null) { return; } - this.conjuncts.addAll(conjuncts); + for (Expr conjunct : conjuncts) { + addConjunct(conjunct); + } } public void addConjunct(Expr conjunct) { if (conjuncts == null) { conjuncts = Lists.newArrayList(); } - conjuncts.add(conjunct); + if (!conjuncts.contains(conjunct)) { + conjuncts.add(conjunct); + } } public void setAssignedConjuncts(Set conjuncts) { @@ -636,7 +640,9 @@ abstract public class PlanNode extends TreeNode { */ protected void assignConjuncts(Analyzer analyzer) { List unassigned = analyzer.getUnassignedConjuncts(this); - conjuncts.addAll(unassigned); + for (Expr unassignedConjunct : unassigned) { + addConjunct(unassignedConjunct); + } analyzer.markConjunctsAssigned(unassigned); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java b/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java index dca24e664b..a7d7d7fa7c 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java +++ b/fe/fe-core/src/main/java/org/apache/doris/rewrite/ExtractCommonFactorsRule.java @@ -25,6 +25,7 @@ import org.apache.doris.analysis.InPredicate; import org.apache.doris.analysis.LiteralExpr; import org.apache.doris.analysis.SlotRef; import org.apache.doris.common.AnalysisException; +import org.apache.doris.planner.PlanNode; import com.google.common.base.Preconditions; import com.google.common.collect.BoundType; @@ -53,6 +54,11 @@ import java.util.Set; * -> (1