This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch branch-4.1
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.1 by this push:
new cf62dc1638c branch-4.1: [improve](nereids) filter
nereidsPrunedTabletIds per partition in distributionPrune #63851 (#63979)
cf62dc1638c is described below
commit cf62dc1638c8b4e58218070dbbb6b95fca7f7ace
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Jun 2 18:15:05 2026 +0800
branch-4.1: [improve](nereids) filter nereidsPrunedTabletIds per partition
in distributionPrune #63851 (#63979)
Cherry-picked from #63851
Co-authored-by: Sim Chou <[email protected]>
Co-authored-by: zhousimin <[email protected]>
---
.../org/apache/doris/planner/OlapScanNode.java | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
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 3f62ccdd3bd..860d77d43dc 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
@@ -407,9 +407,20 @@ public class OlapScanNode extends ScanNode {
DistributionInfo distributionInfo,
boolean pruneTablesByNereids) throws AnalysisException {
if (pruneTablesByNereids) {
- return nereidsPrunedTabletIds.isEmpty()
- ? null
- : new ArrayList<>(nereidsPrunedTabletIds);
+ if (nereidsPrunedTabletIds.isEmpty()) {
+ return null;
+ }
+ // Filter to tablets belonging to this partition. Without this,
the caller's
+ // per-partition loop in computeTabletInfo becomes O(partitionNum
* globalPrunedSize)
+ // getTablet hash lookups (most returning null), which dominates
plan time
+ // when both partition count and pruned tablet count are large.
+ List<Long> result = new ArrayList<>();
+ for (Long id : tabletIdsInOrder) {
+ if (nereidsPrunedTabletIds.contains(id)) {
+ result.add(id);
+ }
+ }
+ return result;
}
DistributionPruner distributionPruner = null;
switch (distributionInfo.getType()) {
@@ -931,8 +942,9 @@ public class OlapScanNode extends ScanNode {
boolean notExistsSampleAndPrunedTablets =
sampleTabletIds.isEmpty() && nereidsPrunedTabletIds.isEmpty();
if (prunedTabletIds != null) {
for (Long id : prunedTabletIds) {
- if (selectedTable.getTablet(id) != null) {
- tablets.add(selectedTable.getTablet(id));
+ Tablet tablet = selectedTable.getTablet(id);
+ if (tablet != null) {
+ tablets.add(tablet);
scanTabletIds.add(id);
} else if (notExistsSampleAndPrunedTablets) {
// The tabletID specified in query does not exist in
this partition, skip scan partition.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]