Commit 90aa7d70 authored by unknown's avatar unknown

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


innobase/btr/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 f81de431
...@@ -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,8 +2719,12 @@ btr_estimate_number_of_different_key_vals( ...@@ -2716,8 +2719,12 @@ 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. */
if (btr_page_get_prev(page, &mtr) != FIL_NULL
|| btr_page_get_next(page, &mtr) != FIL_NULL) {
n_diff[n_cols]++; n_diff[n_cols]++;
} }
}
total_external_size += total_external_size +=
btr_rec_get_externally_stored_len(rec); btr_rec_get_externally_stored_len(rec);
......
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