This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 28960b7b7d1 [Improve](nereids) use hash set replace three set in DiscreteValue to improve in predicate performance (#45181) (#46220) 28960b7b7d1 is described below commit 28960b7b7d136863abcda72f079595025e300543 Author: shee <13843187+qz...@users.noreply.github.com> AuthorDate: Tue Dec 31 23:04:57 2024 +0800 [Improve](nereids) use hash set replace three set in DiscreteValue to improve in predicate performance (#45181) (#46220) ### What problem does this PR solve? cp #45181 --- .../nereids/rules/expression/rules/SimplifyRange.java | 2 +- .../doris/nereids/trees/expressions/InPredicate.java | 11 +++++++++++ .../nereids/rules/expression/SimplifyRangeTest.java | 19 ++++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java index ca50f7c4d49..7931cef1019 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/SimplifyRange.java @@ -408,7 +408,7 @@ public class SimplifyRange implements ExpressionPatternRuleFactory { public DiscreteValue(ExpressionRewriteContext context, Expression reference, Expression toExpr, Collection<Literal> values) { super(context, reference, toExpr); - this.values = Sets.newTreeSet(values); + this.values = Sets.newHashSet(values); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java index b8c0cf54471..1f022962787 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InPredicate.java @@ -27,6 +27,8 @@ import org.apache.doris.nereids.types.DataType; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import java.util.Collection; import java.util.List; @@ -165,4 +167,13 @@ public class InPredicate extends Expression { } return true; } + + //use for ut + public Expression sortOptions() { + if (isLiteralChildren()) { + List<Literal> values = options.stream().map(e -> (Literal) e).collect(Collectors.toList()); + return new InPredicate(compareExpr, Lists.newArrayList(Sets.newTreeSet(values))); + } + return this; + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java index ee86cab62f7..79906880f53 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/expression/SimplifyRangeTest.java @@ -24,6 +24,7 @@ import org.apache.doris.nereids.parser.NereidsParser; import org.apache.doris.nereids.rules.analysis.ExpressionAnalyzer; import org.apache.doris.nereids.rules.expression.rules.SimplifyRange; import org.apache.doris.nereids.trees.expressions.Expression; +import org.apache.doris.nereids.trees.expressions.InPredicate; import org.apache.doris.nereids.trees.expressions.Slot; import org.apache.doris.nereids.trees.expressions.SlotReference; import org.apache.doris.nereids.trees.plans.RelationId; @@ -369,7 +370,7 @@ public class SimplifyRangeTest extends ExpressionRewrite { needRewriteExpression = typeCoercion(needRewriteExpression); Expression expectedExpression = replaceUnboundSlot(PARSER.parseExpression(expected), mem); expectedExpression = typeCoercion(expectedExpression); - Expression rewrittenExpression = executor.rewrite(needRewriteExpression, context); + Expression rewrittenExpression = sortChildren(executor.rewrite(needRewriteExpression, context)); Assertions.assertEquals(expectedExpression, rewrittenExpression); } @@ -443,4 +444,20 @@ public class SimplifyRangeTest extends ExpressionRewrite { return BigIntType.INSTANCE; } } + + private Expression sortChildren(Expression expression) { + if (expression instanceof InPredicate) { + return ((InPredicate) expression).sortOptions(); + } + List<Expression> children = Lists.newArrayList(); + boolean hasNewChildren = false; + for (Expression child : expression.children()) { + Expression newChild = sortChildren(child); + if (newChild != child) { + hasNewChildren = true; + } + children.add(newChild); + } + return hasNewChildren ? expression.withChildren(children) : expression; + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org