diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java index 54cec43ea4..10e311d8d1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/OlapScanNode.java @@ -1378,6 +1378,8 @@ public class OlapScanNode extends ScanNode { // If scan is key search, should not enable the shared scan opt to prevent the performance problem // 1. where contain the eq or in expr of key column slot // 2. key column slot is distribution column and first column + // FIXME: this is not a good check, we can not guarantee that the predicate we check can truly + // help to prune the data, so we should check the predicate's effect on the data. protected boolean isKeySearch() { List whereSlot = Lists.newArrayList(); for (Expr conjunct : conjuncts) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java index 858abeb489..be804e8797 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java +++ b/fe/fe-core/src/main/java/org/apache/doris/planner/ScanNode.java @@ -735,7 +735,7 @@ public abstract class ScanNode extends PlanNode { return Integer.MAX_VALUE; } - public boolean haveLimitAndConjunts() { - return hasLimit() && !conjuncts.isEmpty(); + public boolean shouldUseOneInstance() { + return hasLimit() && conjuncts.isEmpty(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java index fc9665d5a0..458202ced4 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/Coordinator.java @@ -2067,9 +2067,9 @@ public class Coordinator implements CoordInterface { if (node.isPresent() && (!node.get().shouldDisableSharedScan(context) || ignoreStorageDataDistribution)) { expectedInstanceNum = Math.max(expectedInstanceNum, 1); - // if have limit and conjunts, only need 1 instance to save cpu and + // if have limit and no conjuncts, only need 1 instance to save cpu and // mem resource - if (node.get().haveLimitAndConjunts()) { + if (node.get().shouldUseOneInstance()) { expectedInstanceNum = 1; } @@ -2080,9 +2080,9 @@ public class Coordinator implements CoordInterface { //the scan instance num should not larger than the tablets num expectedInstanceNum = Math.min(perNodeScanRanges.size(), parallelExecInstanceNum); } - // if have limit and conjunts, only need 1 instance to save cpu and + // if have limit and no conjuncts, only need 1 instance to save cpu and // mem resource - if (node.get().haveLimitAndConjunts()) { + if (node.get().shouldUseOneInstance()) { expectedInstanceNum = 1; }