btr0cur.c:

  Do not add + 1 to the InnoDB index cardinality estimate if the B-tree just contains one page; the fix made in March 2004 caused InnoDB systematically to overestimate the cardinality of empty or small tables by 1
parent 6ea13f94
...@@ -2707,8 +2707,11 @@ btr_estimate_number_of_different_key_vals( ...@@ -2707,8 +2707,11 @@ btr_estimate_number_of_different_key_vals(
rec = page_rec_get_next(rec); rec = page_rec_get_next(rec);
} }
if (n_cols == dict_index_get_n_unique_in_tree(index)) { if (n_cols == dict_index_get_n_unique_in_tree(index)) {
/* We add one because we know that the first record
/* If there is more than one leaf page in the tree,
we add one because we know that the first record
on the page certainly had a different prefix than the on the page certainly had a different prefix than the
last record on the previous index page in the last record on the previous index page in the
alphabetical order. Before this fix, if there was alphabetical order. Before this fix, if there was
...@@ -2716,7 +2719,11 @@ btr_estimate_number_of_different_key_vals( ...@@ -2716,7 +2719,11 @@ btr_estimate_number_of_different_key_vals(
algorithm grossly underestimated the number of rows algorithm grossly underestimated the number of rows
in the table. */ in the table. */
n_diff[n_cols]++; if (btr_page_get_prev(page, &mtr) != FIL_NULL
|| btr_page_get_next(page, &mtr) != FIL_NULL) {
n_diff[n_cols]++;
}
} }
total_external_size += total_external_size +=
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment