Modify the default value of the better_inlist optimization configuration item to True
This commit is contained in:
@ -1599,7 +1599,7 @@ ERRSIM_DEF_TIME(errsim_transfer_backfill_error_time, OB_TENANT_PARAMETER, "0", "
|
||||
DEF_TIME(_stall_threshold_for_dynamic_worker, OB_TENANT_PARAMETER, "3ms", "[0ms,)",
|
||||
"threshold of dynamic worker works",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
DEF_BOOL(_optimizer_better_inlist_costing, OB_TENANT_PARAMETER, "False",
|
||||
DEF_BOOL(_optimizer_better_inlist_costing, OB_TENANT_PARAMETER, "True",
|
||||
"enable improved costing of index access using in-list(s)",
|
||||
ObParameterAttr(Section::TENANT, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
DEF_BOOL(_optimizer_skip_scan_enabled, OB_TENANT_PARAMETER, "False",
|
||||
|
||||
@ -926,7 +926,8 @@ int ObJoinOrder::get_query_range_info(const uint64_t table_id,
|
||||
? agent_table_filter
|
||||
: helper.filters_,
|
||||
range_info.get_expr_constraints(),
|
||||
query_range))) {
|
||||
table_id,
|
||||
query_range))) {
|
||||
LOG_WARN("failed to extract query range", K(ret), K(index_id));
|
||||
} else if (is_geo_index && OB_FAIL(extract_geo_preliminary_query_range(range_columns,
|
||||
is_oracle_inner_index_table
|
||||
@ -3169,6 +3170,7 @@ int ObJoinOrder::check_exprs_overlap_index(const ObIArray<ObRawExpr*>& quals,
|
||||
int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &range_columns,
|
||||
const ObIArray<ObRawExpr*> &predicates,
|
||||
ObIArray<ObExprConstraint> &expr_constraints,
|
||||
int64_t table_id,
|
||||
ObQueryRange *&query_range)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
@ -3191,7 +3193,7 @@ int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &ran
|
||||
if (OB_ISNULL(tmp_ptr)) {
|
||||
ret = OB_ALLOCATE_MEMORY_FAILED;
|
||||
LOG_WARN("failed to allocate memory for query range", K(ret));
|
||||
} else if (session_info->is_better_inlist_enabled(enable_better_inlist)) {
|
||||
} else if (OB_FAIL(check_enable_better_inlist(table_id, enable_better_inlist))) {
|
||||
LOG_WARN("failed to check better inlist enabled", K(ret));
|
||||
} else if (enable_better_inlist &&
|
||||
OB_FAIL(get_candi_range_expr(range_columns,
|
||||
@ -3230,6 +3232,34 @@ int ObJoinOrder::extract_preliminary_query_range(const ObIArray<ColumnItem> &ran
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObJoinOrder::check_enable_better_inlist(int64_t table_id, bool &enable)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
enable = false;
|
||||
ObOptimizerContext *opt_ctx = NULL;
|
||||
ObSQLSessionInfo *session_info = NULL;
|
||||
OptTableMeta *table_meta = NULL;
|
||||
if (OB_ISNULL(get_plan()) ||
|
||||
OB_ISNULL(opt_ctx = &get_plan()->get_optimizer_context()) ||
|
||||
OB_ISNULL(session_info = opt_ctx->get_session_info())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("get unexpected null", K(get_plan()), K(opt_ctx), K(ret));
|
||||
} else if (!session_info->is_user_session()) {
|
||||
enable = false;
|
||||
} else if (session_info->is_better_inlist_enabled(enable)) {
|
||||
LOG_WARN("failed to check better inlist enabled", K(ret));
|
||||
} else if (!enable) {
|
||||
//do nothing
|
||||
} else if (OB_ISNULL(table_meta=get_plan()->get_basic_table_metas().
|
||||
get_table_meta_by_table_id(table_id))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpect null table meta", K(ret));
|
||||
} else if (table_meta->use_default_stat()) {
|
||||
enable = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObJoinOrder::extract_geo_preliminary_query_range(const ObIArray<ColumnItem> &range_columns,
|
||||
const ObIArray<ObRawExpr*> &predicates,
|
||||
const ColumnIdInfoMap &column_schema_info,
|
||||
|
||||
@ -1591,8 +1591,11 @@ struct NullAwareAntiJoinInfo {
|
||||
int extract_preliminary_query_range(const common::ObIArray<ColumnItem> &range_columns,
|
||||
const common::ObIArray<ObRawExpr*> &predicates,
|
||||
ObIArray<ObExprConstraint> &expr_constraints,
|
||||
int64_t table_id,
|
||||
ObQueryRange* &range);
|
||||
|
||||
int check_enable_better_inlist(int64_t table_id, bool &enable);
|
||||
|
||||
int get_candi_range_expr(const ObIArray<ColumnItem> &range_columns,
|
||||
const ObIArray<ObRawExpr*> &predicates,
|
||||
ObIArray<ObRawExpr*> &range_predicates);
|
||||
|
||||
Reference in New Issue
Block a user