## Proposed changes pick from master #39050
This commit is contained in:
@ -34,6 +34,7 @@ import org.apache.doris.nereids.trees.expressions.IsNull;
|
||||
import org.apache.doris.nereids.trees.expressions.LessThan;
|
||||
import org.apache.doris.nereids.trees.expressions.LessThanEqual;
|
||||
import org.apache.doris.nereids.trees.expressions.Like;
|
||||
import org.apache.doris.nereids.trees.expressions.Match;
|
||||
import org.apache.doris.nereids.trees.expressions.Not;
|
||||
import org.apache.doris.nereids.trees.expressions.NullSafeEqual;
|
||||
import org.apache.doris.nereids.trees.expressions.Or;
|
||||
@ -54,6 +55,8 @@ import org.apache.doris.statistics.StatisticsBuilder;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.Sets;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -74,6 +77,7 @@ public class FilterEstimation extends ExpressionVisitor<Statistics, EstimationCo
|
||||
|
||||
public static final double DEFAULT_LIKE_COMPARISON_SELECTIVITY = 0.2;
|
||||
public static final double DEFAULT_ISNULL_SELECTIVITY = 0.005;
|
||||
private static final Logger LOG = LoggerFactory.getLogger(FilterEstimation.class);
|
||||
private Set<Slot> aggSlots;
|
||||
|
||||
private boolean isOnBaseTable = false;
|
||||
@ -486,7 +490,8 @@ public class FilterEstimation extends ExpressionVisitor<Statistics, EstimationCo
|
||||
child instanceof EqualPredicate
|
||||
|| child instanceof InPredicate
|
||||
|| child instanceof IsNull
|
||||
|| child instanceof Like,
|
||||
|| child instanceof Like
|
||||
|| child instanceof Match,
|
||||
"Not-predicate meet unexpected child: %s", child.toSql());
|
||||
if (child instanceof Like) {
|
||||
rowCount = context.statistics.getRowCount() - childStats.getRowCount();
|
||||
@ -509,6 +514,9 @@ public class FilterEstimation extends ExpressionVisitor<Statistics, EstimationCo
|
||||
.setMinExpr(originColStats.minExpr)
|
||||
.setMaxValue(originColStats.maxValue)
|
||||
.setMaxExpr(originColStats.maxExpr);
|
||||
} else if (child instanceof Match) {
|
||||
rowCount = context.statistics.getRowCount() - childStats.getRowCount();
|
||||
colBuilder.setNdv(Math.max(1.0, originColStats.ndv - childColStats.ndv));
|
||||
}
|
||||
if (not.child().getInputSlots().size() == 1 && !(child instanceof IsNull)) {
|
||||
// only consider the single column numNull, otherwise, ignore
|
||||
|
||||
Reference in New Issue
Block a user