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

Reply via email to