From 9765fbd844bae5835fcbac7c49c3c95492758166 Mon Sep 17 00:00:00 2001 From: solid-yang Date: Tue, 21 May 2024 11:21:36 +0800 Subject: [PATCH] fix calculation of rec_per_key --- storage/tianchi/tse_cbo.cc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/storage/tianchi/tse_cbo.cc b/storage/tianchi/tse_cbo.cc index d6b1211..eaf20f8 100644 --- a/storage/tianchi/tse_cbo.cc +++ b/storage/tianchi/tse_cbo.cc @@ -550,11 +550,20 @@ void tse_index_stats_update(TABLE *table, tianchi_cbo_stats_t *cbo_stats) for (uint32 i = 0; i < table->s->keys; i++) { sk = table->key_info[i]; for (uint32 j = 0; j < sk.actual_key_parts; j++) { + bool all_n_diff_is_zero = true; rec_per_key = 0.0f; for (uint32 k = 0; k < table_part_num; k++) { records = cbo_stats->tse_cbo_stats_table[k].estimate_rows; if (*(n_diff + i * MAX_KEY_COLUMNS + j) > 0) { rec_per_key += static_cast(records) / static_cast(*(n_diff + i * MAX_KEY_COLUMNS + j)); + all_n_diff_is_zero = false; + } + } + + // if all n_diff(s) values 0, take records itself as rec_per_key + if (all_n_diff_is_zero) { + for (uint32 k = 0; k < table_part_num; k++) { + rec_per_key += static_cast(cbo_stats->tse_cbo_stats_table[k].estimate_rows); } } -- Gitee