diff options
author | Jan Lindström <jplindst@mariadb.org> | 2014-11-25 08:31:03 +0200 |
---|---|---|
committer | Jan Lindström <jplindst@mariadb.org> | 2014-11-25 08:31:03 +0200 |
commit | b62c4c6586435ed0b1428145acac5e648d63f8bb (patch) | |
tree | 7eb78c1d4511083a9f15557bec001ead3991b901 /storage/xtradb | |
parent | 77a6abf31141f227202c78e88c7989e5946fa470 (diff) | |
parent | e5802c38f9fc9329276ac9096c10a8176a283cf9 (diff) | |
download | mariadb-git-b62c4c6586435ed0b1428145acac5e648d63f8bb.tar.gz |
Better comments and add a test case.
Diffstat (limited to 'storage/xtradb')
-rw-r--r-- | storage/xtradb/btr/btr0cur.cc | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/storage/xtradb/btr/btr0cur.cc b/storage/xtradb/btr/btr0cur.cc index 64f813f282d..2bc1a7de13c 100644 --- a/storage/xtradb/btr/btr0cur.cc +++ b/storage/xtradb/btr/btr0cur.cc @@ -4095,18 +4095,26 @@ btr_estimate_number_of_different_key_vals( n_sample_pages = srv_stats_transient_sample_pages; } } else { - /* New logaritmic number of pages that are estimated. We - first pick minimun from srv_stats_transient_sample_pages and number of - pages on index. Then we pick maximum from previous number of - pages and log2(number of index pages) * srv_stats_transient_sample_pages. */ + /* New logaritmic number of pages that are estimated. + Number of pages estimated should be between 1 and + index->stat_index_size. We pick index->stat_index_size + as maximum and log2(index->stat_index_size)*sr_stats_transient_sample_pages + if between range as minimum.*/ + if (index->stat_index_size > 0) { - n_sample_pages = ut_max(ut_min(srv_stats_transient_sample_pages, index->stat_index_size), - log2(index->stat_index_size)*srv_stats_transient_sample_pages); + n_sample_pages = ut_min(index->stat_index_size, + ut_max(ut_min(srv_stats_transient_sample_pages, + index->stat_index_size), + log2(index->stat_index_size) + *srv_stats_transient_sample_pages)); } else { n_sample_pages = 1; } } + /* Sanity check */ + ut_ad(n_sample_pages > 0 && n_sample_pages <= (index->stat_index_size < 1 ? 1 : index->stat_index_size)); + /* We sample some pages in the index to get an estimate */ for (i = 0; i < n_sample_pages; i++) { |