From a0c157ebd7efe9b2d60166872de44b798a9e510a Mon Sep 17 00:00:00 2001 From: xianyu-w <707512433@qq.com> Date: Tue, 23 Jan 2024 14:42:47 +0000 Subject: [PATCH] Revise qual selectivity --- src/sql/optimizer/ob_opt_selectivity.cpp | 4 +++- src/sql/optimizer/ob_sel_estimator.cpp | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/sql/optimizer/ob_opt_selectivity.cpp b/src/sql/optimizer/ob_opt_selectivity.cpp index cb1d44ae7f..5ee26e5cd6 100644 --- a/src/sql/optimizer/ob_opt_selectivity.cpp +++ b/src/sql/optimizer/ob_opt_selectivity.cpp @@ -610,6 +610,8 @@ int ObOptSelectivity::calculate_selectivity(const OptTableMetas &table_metas, // do nothing } else if (OB_FAIL(estimator->get_sel(table_metas, ctx, single_sel, all_predicate_sel))) { LOG_WARN("failed to calculate one qual selectivity", KPC(estimator), K(qual), K(ret)); + } else if (FALSE_IT(single_sel = revise_between_0_1(single_sel))) { + // never reach } else if (OB_FAIL(add_var_to_array_no_dup(all_predicate_sel, ObExprSelPair(qual, single_sel)))) { LOG_WARN("fail ed to add selectivity to plan", K(ret), K(qual), K(selectivity)); } else { @@ -630,7 +632,7 @@ int ObOptSelectivity::calculate_selectivity(const OptTableMetas &table_metas, } else if (OB_FAIL(estimator->get_sel(table_metas, ctx, tmp_selectivity, all_predicate_sel))) { LOG_WARN("failed to get sel", K(ret), KPC(estimator)); } else { - selectivities.at(i) = tmp_selectivity; + selectivities.at(i) = revise_between_0_1(tmp_selectivity); if (ObSelEstType::RANGE == estimator->get_type()) { ObRangeSelEstimator *range_estimator = static_cast(estimator); if (OB_FAIL(add_var_to_array_no_dup(all_predicate_sel, diff --git a/src/sql/optimizer/ob_sel_estimator.cpp b/src/sql/optimizer/ob_sel_estimator.cpp index 8d9b1208a6..338fe2de7a 100644 --- a/src/sql/optimizer/ob_sel_estimator.cpp +++ b/src/sql/optimizer/ob_sel_estimator.cpp @@ -1725,7 +1725,7 @@ int ObBoolOpSelEstimator::get_sel(const OptTableMetas &table_metas, } else { // not op. // if can calculate null_sel, sel = 1.0 - null_sel - op_sel - selectivity = 1.0 - null_sel - tmp_selectivity; + selectivity = ObOptSelectivity::revise_between_0_1(1.0 - null_sel - tmp_selectivity); } } else { // for other condition, it's is too hard to consider null_sel, so ignore it.