diff options
author | unknown <jimw@mysql.com> | 2005-05-18 11:06:34 -0700 |
---|---|---|
committer | unknown <jimw@mysql.com> | 2005-05-18 11:06:34 -0700 |
commit | f8a20dbeb6d53fc5d993e088c245e4f2f9b085c5 (patch) | |
tree | 384afb929b09dd50f92ab7de3d46902df3cb3e4e /myisam/mi_check.c | |
parent | 6f7bccd1aca31045e2678159e2e931d2e94f54dd (diff) | |
parent | d104149caf5d272a8495e4bd55ec9eaf3015b408 (diff) | |
download | mariadb-git-f8a20dbeb6d53fc5d993e088c245e4f2f9b085c5.tar.gz |
Resolve merge from 4.1
BitKeeper/etc/logging_ok:
auto-union
configure.in:
Auto merged
myisam/mi_check.c:
Auto merged
mysql-test/mysql-test-run.sh:
Auto merged
client/mysqldump.c:
Resolve merge
mysql-test/r/myisam.result:
Resolve merge
mysql-test/r/mysqldump.result:
Resolve merge
mysql-test/r/olap.result:
Resolve merge
mysql-test/r/subselect.result:
Resolve merge
mysql-test/t/myisam.test:
Resolve merge
mysql-test/t/mysqldump.test:
Resolve merge
mysql-test/t/olap.test:
Resolve merge
mysql-test/t/range.test:
Resolve merge
mysql-test/t/subselect.test:
Resolve merge
ndb/src/common/util/version.c:
Resolve merge
ndb/src/ndbapi/ndberror.c:
Resolve merge
sql/item.cc:
Resolve merge
sql/item_strfunc.h:
Resolve merge
sql/sql_select.cc:
Resolve merge
sql/sql_yacc.yy:
Resolve merge
Diffstat (limited to 'myisam/mi_check.c')
-rw-r--r-- | myisam/mi_check.c | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 2949b39183d..38f3ebaa20a 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -3244,6 +3244,9 @@ static int sort_key_write(MI_SORT_PARAM *sort_param, const void *a) cmp=ha_key_cmp(sort_param->seg,sort_info->key_block->lastkey, (uchar*) a, USE_WHOLE_KEY,SEARCH_FIND | SEARCH_UPDATE, &diff_pos); + ha_key_cmp(sort_param->seg,sort_info->key_block->lastkey, + (uchar*) a, USE_WHOLE_KEY,SEARCH_FIND | SEARCH_NULL_ARE_NOT_EQUAL, + &diff_pos); sort_param->unique[diff_pos-1]++; } else @@ -3956,7 +3959,38 @@ void update_auto_increment_key(MI_CHECK *param, MI_INFO *info, return; } - /* calculate unique keys for each part key */ + +/* + Update statistics for each part of an index + + SYNOPSIS + update_key_parts() + keyinfo Index information (only key->keysegs used) + rec_per_key_part OUT Store statistics here + unique IN Array of #distinct values collected over index + run. + records Number of records in the table + + NOTES + Unique is an array: + unique[0]= (#different values of {keypart1}) - 1 + unique[1]= (#different values of {keypart2,keypart1} tuple) - unique[0] - 1 + ... + Here we assume that NULL != NULL (see SEARCH_NULL_ARE_NOT_EQUAL). The + 'unique' array is collected in one sequential scan through the entire + index. This is done in two places: in chk_index() and in sort_key_write(). + + Output is an array: + rec_per_key_part[k] = + = E(#records in the table such that keypart_1=c_1 AND ... AND + keypart_k=c_k for arbitrary constants c_1 ... c_k) + + = {assuming that values have uniform distribution and index contains all + tuples from the domain (or that {c_1, ..., c_k} tuple is choosen from + index tuples} + + = #tuples-in-the-index / #distinct-tuples-in-the-index. +*/ void update_key_parts(MI_KEYDEF *keyinfo, ulong *rec_per_key_part, ulonglong *unique, ulonglong records) |