[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:
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
Reference in New Issue
Block a user