[fix](nereids) stats derive for "not equal“, avoid to derive zero ndv (#31566)

This commit is contained in:
minghong
2024-02-29 16:01:01 +08:00
committed by yiguolei
parent 0b5b7175d6
commit a6ab6c1cb8

View File

@ -24,7 +24,6 @@ import org.apache.doris.nereids.trees.expressions.And;
import org.apache.doris.nereids.trees.expressions.ComparisonPredicate;
import org.apache.doris.nereids.trees.expressions.CompoundPredicate;
import org.apache.doris.nereids.trees.expressions.EqualPredicate;
import org.apache.doris.nereids.trees.expressions.EqualTo;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.GreaterThan;
import org.apache.doris.nereids.trees.expressions.GreaterThanEqual;
@ -376,9 +375,9 @@ public class FilterEstimation extends ExpressionVisitor<Statistics, EstimationCo
"Not-predicate meet unexpected child: %s", child.toSql());
if (child instanceof Like) {
rowCount = context.statistics.getRowCount() - childStats.getRowCount();
colBuilder.setNdv(originColStats.ndv - childColStats.ndv);
colBuilder.setNdv(Math.max(1.0, originColStats.ndv - childColStats.ndv));
} else if (child instanceof InPredicate) {
colBuilder.setNdv(originColStats.ndv - childColStats.ndv);
colBuilder.setNdv(Math.max(1.0, originColStats.ndv - childColStats.ndv));
colBuilder.setMinValue(originColStats.minValue)
.setMinExpr(originColStats.minExpr)
.setMaxValue(originColStats.maxValue)
@ -389,8 +388,8 @@ public class FilterEstimation extends ExpressionVisitor<Statistics, EstimationCo
.setMinExpr(originColStats.minExpr)
.setMaxValue(originColStats.maxValue)
.setMaxExpr(originColStats.maxExpr);
} else if (child instanceof EqualTo) {
colBuilder.setNdv(originColStats.ndv - childColStats.ndv);
} else if (child instanceof EqualPredicate) {
colBuilder.setNdv(Math.max(1.0, originColStats.ndv - childColStats.ndv));
colBuilder.setMinValue(originColStats.minValue)
.setMinExpr(originColStats.minExpr)
.setMaxValue(originColStats.maxValue)