summaryrefslogtreecommitdiff
path: root/myisam/mi_check.c
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-05-18 11:06:34 -0700
committerunknown <jimw@mysql.com>2005-05-18 11:06:34 -0700
commitf8a20dbeb6d53fc5d993e088c245e4f2f9b085c5 (patch)
tree384afb929b09dd50f92ab7de3d46902df3cb3e4e /myisam/mi_check.c
parent6f7bccd1aca31045e2678159e2e931d2e94f54dd (diff)
parentd104149caf5d272a8495e4bd55ec9eaf3015b408 (diff)
downloadmariadb-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.c36
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)