[Improve](point query) improve column match performance when doing computeColumnFilter to prune partition (#17982)

Only use key columns when `computeColumnFilter` otherwise for wide tables the match process could be very slow

500 columns table QPS:
6186 -> 13208
This commit is contained in:
lihangyu
2023-03-23 17:45:34 +08:00
committed by GitHub
parent f43d2ded0a
commit 8b617afe43
2 changed files with 9 additions and 5 deletions

View File

@ -1027,12 +1027,12 @@ public class OlapScanNode extends ScanNode {
return result;
}
// Only called when Coordinator exec in point query
// Only called when Coordinator exec in high performance point query
public List<TScanRangeLocations> lazyEvaluateRangeLocations() throws UserException {
// Lazy evaluation
selectedIndexId = olapTable.getBaseIndexId();
// TODO(lhy) this function is a heavy operation for point query
computeColumnFilter();
// Only key columns
computeColumnFilter(olapTable.getBaseSchemaKeyColumns());
computePartitionInfo();
scanBackendIds.clear();
scanTabletIds.clear();

View File

@ -140,8 +140,8 @@ public abstract class ScanNode extends PlanNode {
}
// TODO(ML): move it into PrunerOptimizer
public void computeColumnFilter() {
for (Column column : desc.getTable().getBaseSchema()) {
public void computeColumnFilter(List<Column> columns) {
for (Column column : columns) {
SlotDescriptor slotDesc = desc.getColumnSlot(column.getName());
if (null == slotDesc) {
continue;
@ -161,6 +161,10 @@ public abstract class ScanNode extends PlanNode {
}
}
public void computeColumnFilter() {
computeColumnFilter(desc.getTable().getBaseSchema());
}
public static ColumnRange createColumnRange(SlotDescriptor desc,
List<Expr> conjuncts) {
ColumnRange result = ColumnRange.create();