This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new f983411b0e5 [Improve](nereids) use hash set replace three set in
DiscreteValue to improve in predicate performance (#45181) (#46222)
f983411b0e5 is described below
commit f983411b0e52a8b36a62d66011676a2137952fd0
Author: shee <[email protected]>
AuthorDate: Wed Jan 1 00:36:10 2025 +0800
[Improve](nereids) use hash set replace three set in DiscreteValue to
improve in predicate performance (#45181) (#46222)
---
.../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: [email protected]
For additional commands, e-mail: [email protected]